Использование System.Web.Script.Serialization.JavascriptSerializer для десериализации JSON - как? - PullRequest
6 голосов
/ 20 сентября 2009

Примечание: я отправил аналогичный вопрос , который был прародителем этого вопроса, так как я первоначально думал об использовании JSON.NET для анализа JSON, но я использую встроенный в десериализаторе, так что это другой вопрос.

Вот что я пытаюсь сделать: например, у меня есть класс Item. У json есть много «элементов» (если так они называются - они имитируют класс Item), и каждое из них содержит 3 поля: целое число с именем id, строка с именем name и дата-время с именем creationTime. Я хотел бы проанализировать все эти «элементы» Item из json в список объектов Item. Я создал 3 поля в классе Item, чтобы соответствовать JSON.

Вот что я сейчас делаю:

JavaScriptSerializer ser = new JavaScriptSerializer();          
List<Item> items = ser.Deserialize<Item>(new StreamReader(response.GetResponseStream()).ReadToEnd());

Однако это не работает, потому что я "не могу неявно преобразовать тип 'superapi.Item' в 'System.Collections.Generic.List <superapi.Item>'". Таким образом, я не знаю, как решить эту проблему, так как в JSON есть много элементов архитектуры Item. Можно ли как-то сделать это в цикле foreach, найти каждый десериализованный элемент в JSON, добавить его в список и продолжить цикл? Я попытаюсь сделать это с помощью некоторого похожего кода, и я опубликую свои результаты.

Спасибо!

ОБНОВЛЕНИЕ: Вот как выглядит JSON:

[{
    "Id": 1,
    "Name": "First item name",
    "creationTime": "\/Date(1247258293690)\/"
},
{
    "Id": 2,
    "Name": "Second item name",
    "creationTime": "\/Date(1247088323430)\/"
}]

Вот как выглядит мой класс Item:

public class Item
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public DateTime creationTime { get; set; }
    }

1 Ответ

8 голосов
/ 20 сентября 2009

Я пробовал на вашем примере json / class, и следующее прекрасно работает:

List<Item> items = ser.Deserialize<List<Item>>(json);

Фактический код отличается?

(где json - строка - не стесняйтесь заменить на ReadToEnd и т. Д .; или используйте WebClient.DownloadString, что проще)

...