使用System.Web.Script.Serialization.JavascriptSerializer反序列化JSON – 如何?
注意:我发布了一个类似的问题 ,这是这个问题的祖先,因为我最初考虑使用JSON.NET来解析JSON,但我正在使用内置的反序列化器,所以这是一个不同的问题。
这就是我要做的事情:例如,我有一个名为Item的类。 json有许多“元素”(如果它们被称为 – 它们模仿Item类),每个元素包含3个字段:一个名为id的整数,一个名为name的字符串和一个名为creationTime的日期时间。 我想将所有这些Item“元素”从json解析为Item对象列表。 我在Item类中创建了3个字段以匹配JSON。
这就是我目前正在做的事情:
JavaScriptSerializer ser = new JavaScriptSerializer(); List items = ser.Deserialize(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; } }
我尝试使用您的示例json / class,以下工作正常:
List- items = ser.Deserialize
- >(json);
实际代码有什么不同吗?
(其中json
是字符串 – 可以随意替换ReadToEnd
等;或者使用WebClient.DownloadString
,这更简单)