2013-05-01 50 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>