摘要 类 客户端生成的代码来自 swagger 规范 API net core

Abstract classes on client generated code from swagger spec API net core

我的 api 上的错误基础 class 有问题。我使用 options to see it working on documentation. But when I use the swagger json to generate Rest Code on https://editor.swagger.io 它生成 3 个 classes,BaseException(抽象),错误和警告。当我使用相应的代码时,在我的响应中会出现一个 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. 

我试图维护生成的 class 结构,但没有成功,因为 return BaseException 内容和 classes 上的鉴别器始终为空(我不知道为什么)

我该如何解决这个问题? 谢谢!

JsonConverter 属性的第二个参数应该是鉴别器字段,在你的 JSON 样本中它应该是 severity 所以 BaseException class 应该这样定义:

[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/