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

7
注意:我曾经发布过一个类似的问题,那个问题是这个问题的前身,因为我最初想使用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());

然而,这并不起作用,因为我“无法将类型'superapi.Item'隐式转换为'System.Collections.Generic.List<superapi.Item>'”。因此,我不知道如何解决这个问题,因为JSON中有许多Item架构的元素。在foreach循环中是否有可能做到这一点,以查找JSON中的每个反序列化Item,将其添加到列表中并继续循环?我将尝试使用类似的代码来做到这一点,并发布我的结果。

谢谢!

更新:这是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? - Marc Gravell
@Marc 嗯,好的...我会尝试去做...你说的class也包括Item类吗? - Maxim Zaslavsky
@Marc,完成了!我已经插入了示例JSON和类代码...太棒了! - Maxim Zaslavsky
@Marc 哇,谢谢!我昨天发布的关于使用JSON.NET做类似事情的问题,没有得到任何答案...感谢你让我开心了一整天! - Maxim Zaslavsky
@Marc,没有什么特别的,但我相信在寻找如何使这个工作时,我在某个地方看到过(XMLAtribute)可以添加到类中的每个属性上 - 我想那就是它的名称。 - Maxim Zaslavsky
显示剩余4条评论
1个回答

8

我尝试使用您的示例json / class,以下内容运行良好:

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

实际代码是否有所不同?

(其中json是字符串-可以随意替换为ReadToEnd等;或使用更简单的WebClient.DownloadString


哦,傻了!我一直将ser.Deserialize的T设置为Item,但它是List<Item>!我真笨!;)现在去尝试一下。非常感谢! - Maxim Zaslavsky
@Marc 嗯,它在Deserialize调用时给了我一个InvalidOperationException,说它无法将null转换为值类型...我要尝试进一步了解发生了什么。 - Maxim Zaslavsky
@Marc 我认为发生的情况是它没有识别出我的Item类中的属性及其与JSON的关系。它们需要特殊的属性吗? - Maxim Zaslavsky
@Marc,“实际代码是否有所不同”是指我的Item类和JSON有点概括和简化吗?对此,答案是肯定的。但它仍然应该可以工作,因为JSON似乎在结构上是正确的。 - Maxim Zaslavsky
@Marc 实际的代码是一个简单的 .NET 库,用于预阿尔法 SO Api。我在 meta 上看到它,想找个机会以一种好的方式玩弄一些 json,所以我开始构建一个。别担心,我不会滥用它,因为我 <3 StackOverflow!我真正使用的 JSON 在这里:http://stackoverflow.com/api/userfavorites.json?userid=130164&page=0&pagesize=10&sort=recent - Maxim Zaslavsky

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接