Абстрактные классы в клиентском сгенерированном коде из ядра сети API спецификации swagger

У меня проблема с моим базовым классом ошибок в моем API. Я использовал это параметры, чтобы увидеть он работает над документацией. Но когда я использую swagger json для генерации кода паузы на https://editor.swagger.io/, он генерирует 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, а дискриминатор в классах был нулевым (я не знаю, почему)

Как я могу это исправить? спасибо!


person ArlanG    schedule 13.11.2018    source источник


Ответы (1)


Вторым параметром атрибута 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/.

person manuc66    schedule 01.05.2019