客户从swagger spec API网络核心生成的代码上的抽象类

时间:2018-11-13 16:45:16

标签: c# asp.net-core swagger apiclient

我的api错误基类有问题。我使用了this选项来查看它在文档中的工作。但是,当我使用swagger json在https://editor.swagger.io上生成Rest Code时,它将生成3个类BaseException(抽象),Error和Warning。当我使用相应的代码时,响应中会列出BaseException列表,但始终向我显示仅基本信息

exceptions:[
    {
      "severity": "Warning",
      "message": "warning message"
    },
    {
      "severity": "Error",
      "message": "testing"
    }
]

如果我把它抽象化的话

[DataContract]
    [JsonConverter(typeof(JsonSubtypes), "BaseException")]
    [JsonSubtypes.KnownSubType(typeof(ErrorData), "Error")]
    [JsonSubtypes.KnownSubType(typeof(WarningData), "Warning")]
    public abstract class BaseException : IEquatable<BaseException>
    {

引发了另一个例外:

Could not create an instance of type Api.Test.Client.Model.BaseException. Type is an interface or abstract class and cannot be instantiated. Path 'severity', line 488, position 17. 

我试图维护生成的类结构,但是没有运气,因为总是返回BaseException内容,并且类的鉴别符为空(我不知道为什么)

我该如何解决? 谢谢!

1 个答案:

答案 0 :(得分:0)

JsonConverter属性的第二个参数应该是discriminator字段,在您的JSON示例中,它应该是severity,因此BaseException类应该这样定义:

[DataContract]
[JsonConverter(typeof(JsonSubtypes), "severity")]
[JsonSubtypes.KnownSubType(typeof(ErrorData), "Error")]
[JsonSubtypes.KnownSubType(typeof(WarningData), "Warning")]
public abstract class BaseException : IEquatable<BaseException>
{

请参阅文档:https://manuc66.github.io/JsonSubTypes/