Подтвердить что ты не робот

Как Web API возвращает несколько типов

Мне просто интересно, можно ли возвращать несколько типов в одном веб-Api. Например, я хочу, чтобы api возвращал оба списка клиентов и заказов (эти два набора данных могут или не могут быть связаны друг с другом?

4b9b3361

Ответ 1

Чтобы вернуть несколько типов, вы можете обернуть их в анонимный тип, существует два возможных подхода:

public HttpResponseMessage Get()
{
    var listInt = new List<int>() { 1, 2 };
    var listString = new List<string>() { "a", "b" };

    return ControllerContext.Request
        .CreateResponse(HttpStatusCode.OK, new { listInt, listString });
}

Или:

public object Get()
{
    var listInt = new List<int>() { 1, 2 };
    var listString = new List<string>() { "a", "b" };

    return  new { listInt, listString };
}

Также помните, что XML-сериализатор не поддерживает анонимные типы. Итак, вы должны убедиться, что запрос должен иметь заголовок:

Accept: application/json

чтобы принять формат json

Ответ 2

Вы должны использовать сериализатор JsonNetFormatter, потому что сериализатор по умолчанию - DataContractJsonSerializer не может сериализовать анонимные типы.

public HttpResponseMessage Get()
{
    List<Customer> cust = GetCustomers();
    List<Products> prod= GetCustomers();
    //create an anonymous type with 2 properties
    var returnObject = new { customers = cust, Products= prod };
    return new HttpResponseMessage<object>(returnObject , new[] { new JsonNetFormatter() });
}

Вы можете получить JsonNetFormatter из ЗДЕСЬ