首页 > 解决方案 > 客户端从 swagger 规范 API 网络核心生成代码的抽象类

问题描述

我的 api 上的错误基类有问题。我使用这个选项来查看它在文档上的工作。但是当我使用 swagger json 在https://editor.swagger.io上生成 Rest Code 时,它​​会生成 3 个类,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. 

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

我怎样才能解决这个问题?谢谢你!

标签: c#asp.net-coreswaggerapiclient

解决方案


属性的第二个参数JsonConverter应该是鉴别器字段,在您的 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/


推荐阅读