Абстрактные классы на сгенерированном клиентом коде из swagger spec API core core - PullRequest
0 голосов
/ 13 ноября 2018

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

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

1 Ответ

0 голосов
/ 02 мая 2019

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

...