Мне просто интересно, можно ли возвращать несколько типов в одном веб-Api. Например, я хочу, чтобы api возвращал оба списка клиентов и заказов (эти два набора данных могут или не могут быть связаны друг с другом?
Как Web API возвращает несколько типов
Ответ 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 из ЗДЕСЬ