使用System.Web.Script.Serialization.JavascriptSerializer反序列化JSON - 如何?

Max*_*sky 6 .net c# serialization json javascriptserializer

注意:我发布了一个类似的问题,这是这个问题的祖先,因为我最初考虑使用JSON.NET来解析JSON,但我正在使用内置的反序列化器,所以这是一个不同的问题.

这就是我要做的事情:例如,我有一个名为Item的类.json有许多"元素"(如果这就是它们被称为 - 它们模仿Item类),每个元素包含3个字段:一个名为id的整数,一个名为name的字符串和一个名为creationTime的日期时间.我想将所有这些Item"元素"从json解析为Item对象列表.我在Item类中创建了3个字段以匹配JSON.

这就是我目前正在做的事情:

JavaScriptSerializer ser = new JavaScriptSerializer();          
List<Item> items = ser.Deserialize<Item>(new StreamReader(response.GetResponseStream()).ReadToEnd());
Run Code Online (Sandbox Code Playgroud)

但是,这不起作用,因为我"无法将类型'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)\/"
}]
Run Code Online (Sandbox Code Playgroud)

这是我的Item类的样子:

public class Item
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public DateTime creationTime { get; set; }
    }
Run Code Online (Sandbox Code Playgroud)

Mar*_*ell 8

我尝试使用您的示例json/class,以下工作正常:

List<Item> items = ser.Deserialize<List<Item>>(json);
Run Code Online (Sandbox Code Playgroud)

实际代码有什么不同吗?

(json字符串在哪里- 随意替换ReadToEnd等;或使用WebClient.DownloadString,这更简单)