Andreas Mertens Ответов: 1

Я пытаюсь использовать autorest для создания моего клиента web api, но возвращаемые типы datacontract всегда генерируются как объект


Я пытаюсь вызвать свой собственный вызов Web API, чтобы получить объект, который я определяю как контракт данных. Я использую Swagger для украшения вызова, а в клиенте я генерирую клиент с помощью AutoREST. Однако, хотя мои вызовы, которые проходят в объекте [DataContract], работают нормально, возвращаемые значения всегда задаются как объект в сгенерированном клиентском коде, а не соответствующий класс [DataContract], который я определил.

Я искал больше информации о Swagger/Swashbuckle и AutoREST и о том, что мне нужно сделать, но не очень много помощи. Это происходит с VS 2015 Pro с использованием .Net 4.5.2.

Когда я прослеживаю и смотрю на фактические данные HttpResponse, я получаю свой объект сериализованным как JSON. Однако сгенерированный клиент хочет только десериализоваться как объект, который, конечно же, возвращает null. Я мог бы взломать сгенерированный код, но мне придется делать это всякий раз, когда он будет регенерирован.

Я был бы признателен за любую информацию по этому поводу...

Что я уже пробовал:

Вот один из DataContracts:
[DataContract]
public class Company
{
    [DataMember(Name = "id")]
    public int Id { get; set; }

    [DataMember(Name = "companyName")]
    public string CompanyName { get; set; }

    [DataMember(Name = "website")]
    public string Website { get; set; }

    [DataMember(Name = "description")]
    public string CompanyDescription { get; set; }
}


А вот звонок, чтобы получить экземпляр:
[SwaggerOperation("GetCompanyById")]
[SwaggerResponse(HttpStatusCode.OK)]
[SwaggerResponse(HttpStatusCode.NotFound)]
public DataContract.Company Get(int id)
{
    //*** work to retrieve the data, validate etc. ***
    DataContract.Company company = ...
	
    return company;
}

1 Ответов

Рейтинг:
0

Andreas Mertens

Понять это. Похоже, что есть дополнительные параметры атрибутов SwaggerResponse, о которых я не знал (из-за отсутствия какой-либо четкой документации по пакету Swashbuckle). Я нашел их с помощью ObjectBrowser и обнаружил, что существует дополнительный набор необязательных параметров:

[SwaggerResponse(HttpStatusCode.OK, Description = "Get a Company by ID", Type = typeof(DataContract.Company))]


В любом случае, с этим на месте, клиент REST генерируется правильно. Я надеюсь, что это поможет любому, кто попробует это сделать сам...