2013-05-01 25 views
0

我有一个asp.net mvc api控制器方法,它有一个List作为其返回方法。当把它称为返回此JSON数据:asp.net mvc api json wrapper

[ 
    { 
    "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时返回此“包装”格式?

+0

只是好奇回 对象是一个有效的JSON已经? – 2013-05-01 10:48:18

回答

0

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

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问题)。

不管怎样,在我看来,这是一个更容易忍受你的对象的新版本,主要是因为它没有一个(吵)来包裹:)

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>