0

我有一个 asp.net mvc api 控制器方法,它有一个 List 作为它的返回方法。调用时,它会返回此 json 数据:

[
  {
    "AreaName": null,
    "AreaId": 0,
    "DestinationName": "Alanya",
    "DestinationId": 14,
    "CountryName": "Tyrkiet",
    "CountryId": 15
  },
  {
    "AreaName": null,
    "AreaId": 0,
    "DestinationName": "Antalya",
    "DestinationId": 113,
    "CountryName": "Tyrkiet",
    "CountryId": 15
  }
]

早些时候,当我在 asp.net mvc 中使用此方法时,它看起来类似于:

较早的 json 数据:

{
    "ContentEncoding":{
    "IsSingleByte":true,
    "BodyName":"iso-8859-1",
    "EncodingName":"Western European (Windows)",
    "HeaderName":"Windows-1252",
    "WebName":"Windows- 1252",
    "WindowsCodePage":1252,
    "IsBrowserDisplay":true,
    "IsBrowserSave":true,
    "IsMailNewsDisplay":true,
    "IsMailNewsSave":true,
    "EncoderFallback":{
        "MaxCharCount":1
    },
    "DecoderFallback":{
        "MaxCharCount":1
    },
    "IsReadOnly":true,
    "CodePage":1252
},
"ContentType":"application/json;",
"Data":

然后将上面的列表添加到数据包装器中

我的问题是 - 使用 asp.net mvc web api 时如何恢复这种“包装器”格式?

4

3 回答 3

0

您的 JSON 是对象列表的正常格式,第二种较旧的格式表示对象。所以当你需要它时 - 只需返回对象。

于 2013-05-01T10:50:33.587 回答
0

您可以创建自己的返回类型,如下所示:

public class InvoiceResult
{
    public int numberResultTotal;
    public int numberResultPaged;
    public List<InvoiceDTO> results;
}

ASP.NET Web API 会将其转换为 JSON、XML 或任何其他格式,您的客户端将得到如下内容:

<InvoiceResult>
<numberResultPaged>20</numberResultPaged>
<numberResultTotal>999999</numberResultTotal>
<results>
<InvoiceDTO>
<ID>110</ID>
<Active>2</Active>
<Date>01/01/2010</Date>
</InvoiceDTO>
<InvoiceDTO>...</InvoiceDTO>
<InvoiceDTO>...</InvoiceDTO>
<InvoiceDTO>...</InvoiceDTO>
</results>
</InvoiceResult>
于 2014-07-08T16:14:34.543 回答
0

可能,在旧版本(普通 mvc)中,您确实返回了如下内容:

return JsonResult(new { Data = myList });

现在,在 WebApi 中,您可以这样做:

return myList;

这就解释了为什么旧结果具有所有格式。要取回 WebApi 中的旧包装器,我想您只需执行以下操作:

return new { Data = myList };

如果上述方法不起作用,请尝试以下方法:

  1. 将方法的返回类型更改为HttpResponseMessage

  2. 用这个:

    return Request.CreateResponse(HttpStatusCode.OK, new { Data = myList });

我目前没有任何要调试的东西,但上述两个都应该工作。如果他们不这样做,那可能是因为序列化-反序列化不喜欢匿名对象(这实际上可能会给您带来比 JSON 更多的 XML 问题)。

无论如何,在我看来,使用新版本的对象要容易得多,主要是因为它没有(嘈杂的)包装器:)

于 2013-05-01T11:08:19.043 回答