2013-05-01 3 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? –

ответ

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 });

В настоящее время мне нечего отлаживать, но оба вышеперечисленных должны работать. Если это не так, вероятно, потому, что сериализация-десериализация не похожа на анонимные объекты (это может дать вам больше проблем с XML, чем на самом деле JSON).

Во всяком случае, на мой взгляд, это намного проще жить с новой версией вашего объекта, в основном, потому что он не имеет (шумный) обертку вокруг :)

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> 
Смежные вопросы