24

単一の Web API で複数の型を返すことが可能かどうか疑問に思っています。たとえば、API が顧客と注文の両方のリストを返すようにしたいとします (これら 2 つのデータ セットは互いに関連している場合と関連していない場合があります。

4

3 に答える 3

39

複数の型を返すには、それらを匿名型にラップできます。次の 2 つの方法があります。

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形式を受け入れるために

于 2012-07-31T05:24:37.550 に答える
0

デフォルトのシリアライザーである DataContractJsonSerializer は匿名型をシリアライズできないため、JsonNetFormatter シリアライザーを使用する必要があります。

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 はHEREから入手できます

于 2012-07-31T04:50:20.070 に答える
0

これの代わりに:

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

これを使って:

return Ok(new {new List<int>() { 1, 2 }, new List<string>() { "a", "b" }});
于 2020-04-15T20:16:36.410 に答える