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

发布于 2024-08-05 01:48:54 字数 1377 浏览 7 评论 0 原文

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

这就是我想要做的:我例如,有一个名为 Item 的类。 json 有许多“元素”(如果这就是它们的名称 - 它们模仿 Item 类),每个元素包含 3 个字段:一个名为 id 的整数、一个名为 name 的字符串和一个名为creationTime 的日期时间。我想将 json 中的所有这些 Item“元素”解析为 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 >'”。因此,我不知道如何解决这个问题,因为 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; }
    }

Note: I posted a similar question, which was the ancestor of this question, as I was originally thinking of using JSON.NET to parse the JSON, but I'm using the built-in deserializer, so it's a different question.

This is what I'm trying to do: I have a class called Item, for example. The json has many "elements" (if that's what they are called - they mimic the Item class), and each contains 3 fields: an integer named id, a string named name, and a datetime named creationTime. I would like to parse all of these Item "elements" from the json into a list of Item objects. I have created 3 fields in the Item class to match the JSON.

This is what I'm currently doing:

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

However, this isn't working, because I "cannot implicitly convert type 'superapi.Item' to 'System.Collections.Generic.List<superapi.Item>'". Thus, I do not know how to approach this problem, as there are many elements of the Item architecture in the JSON. Is it somehow possible to do this in a foreach loop, to find each deserialized Item in the JSON, add that to the list, and continue the loop? I'm going to attempt to do just that with some similar code, and I will post my results.

Thanks!

UPDATE: This is what some of the JSON looks like:

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

This is what my Item class looks like:

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

挽梦忆笙歌 2024-08-12 01:48:54

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

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

实际代码有什么不同吗?

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

I tried with your example json / class, and the following works fine:

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

Is the actual code any different?

(where json is the string - feel free to replace by ReadToEnd etc; or use WebClient.DownloadString, which is simpler)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文