Наследование и дискриминатор в базовом классе - PullRequest
0 голосов
/ 30 ноября 2018

У меня есть операция класса:

public class Operation
{
    public string Type { get; set; }

    public OperationOptions Options { get; set; }
}

Где значение Type определяет тип Options.Но я должен добавить discriminator к OperationOptions типу

[KnownType(typeof(EchoOptions))]
[KnownType(typeof(VetDocumentAcceptanceOptions))]
[JsonConverter(typeof(JsonInheritanceConverter), "discriminator")]
public class OperationOptions
{
}

public class EchoOptions : OperationOptions
{
}

public class VetDocumentAcceptanceOptions : OperationOptions
{
}

Так я попадаю в swagger.json:

  "OperationOptions": {
    "type": "object",
    "discriminator": {
      "propertyName": "discriminator",
      "mapping": {
        "EchoOptions": "#/components/schemas/EchoOptions",
        "VetDocumentAcceptanceOptions": "#/components/schemas/VetDocumentAcceptanceOptions"
      }
    }

Но у меня нет свойства Discriminator вOperationOptions в моей модели.

Есть ли способ использовать Type в Operation в качестве дискриминатора для OperationOptions?

1 Ответ

0 голосов
/ 03 декабря 2018

JsonInheritanceConverter автоматически добавит свойство discriminator в сериализованный JSON и будет использовать это свойство при десериализации JSON для типа, чтобы выбрать правильный тип.Лучше на самом деле не видеть свойство как свойство C #.

...