简体   繁体   English

基类的继承和区分

[英]Inheritance and discriminator in base class

I have class operation: 我有上课作业:

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

    public OperationOptions Options { get; set; }
}

Where value of Type defines type of Options . 其中Type值定义OptionsType But I have to add discriminator to OperationOptions type 但是我必须将discriminator OperationOptions添加到OperationOptions类型

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

public class EchoOptions : OperationOptions
{
}

public class VetDocumentAcceptanceOptions : OperationOptions
{
}

So I get in swagger.json: 所以我进入swagger.json:

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

But I don't have property Discriminator in OperationOptions in my model. 但是我的模型在OperationOptions中没有属性Discriminator

Is there any way to use Type in Operation as discriminator for OperationOptions ? 有什么方法可以将Operation Type用作Operation区分OperationOptions

The JsonInheritanceConverter will automatically add the discriminator property to the serialized JSON and use this property when deserializing JSON to a type to select the correct type. JsonInheritanceConverter会自动将discriminator属性添加到序列化的JSON,并在将JSON反序列化为一种类型以选择正确的类型时使用此属性。 It's better to actually not see the property as a C# property. 最好不要将该属性视为C#属性。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM