【发布时间】:2012-07-31 04:39:36
【问题描述】:
我只是想知道是否可以在单个 Web Api 中返回多种类型。例如,我想要一个 api 同时返回客户列表和订单(这两组数据可能相互关联也可能不相互关联?
【问题讨论】:
标签: c# asp.net-web-api
我只是想知道是否可以在单个 Web Api 中返回多种类型。例如,我想要一个 api 同时返回客户列表和订单(这两组数据可能相互关联也可能不相互关联?
【问题讨论】:
标签: c# asp.net-web-api
要返回多个类型,可以将它们包装成匿名类型,有两种可能的方法:
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格式
【讨论】:
你必须使用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() });
}
你可以从HERE获取JsonNetFormatter
【讨论】:
而不是这个:
return ControllerContext.Request
.CreateResponse(HttpStatusCode.OK, new { listInt, listString });
使用这个:
return Ok(new {new List<int>() { 1, 2 }, new List<string>() { "a", "b" }});
【讨论】: