gpt4 book ai didi

c# - 使用 JSON.net 将内部数组反序列化为对象

转载 作者:行者123 更新时间:2023-11-30 21:50:29 24 4
gpt4 key购买 nike

现有的基于 JSON 的 Web 服务返回一个相当困惑的 JSON 对象,其中所有有用的数据都包含在一个数组的元素中,该数组本身就是一个 1 元素数组的内容。像这样的东西(我匿名了,希望没有错别字):

{"rows":[[
{"name":"John","time":"2016-03-20 01:00:00","id":"2","code":"1234"},
{"name":"Sam","time":"2016-03-20 01:00:00","id":"24","code":"999"},
{"name":"Paul","time":"2016-03-20 01:00:00","id":"12","code":"6512"}
]]}

使用 JSON.net 我需要访问每个行子元素,但我不确定如何对此进行迭代以及我是否应该反序列化为具体类型或只是从我的 json 对象读取原始数据。

数据将在方法内聚合,因此每个的“类型”不需要在方法外知道。

rows始终是包含元素数组的 1 元素数组,如图所示。

最佳答案

@Fals 的解决方案应该运行良好,但如果您想取消 RootObject,您可以使用 Json.Net 的 LINQ-to-JSON API解析 JSON 并将数据放入易于使用的简单项目列表中。

假设您为项目数据定义了一个类,如下所示:

public class Item
{
public string name { get; set; }
public DateTime time { get; set; }
public string id { get; set; }
public string code { get; set; }
}

然后您可以执行此操作以获取您的项目列表:

List<Item> items = JObject.Parse(json)["rows"][0]
.Select(jt => jt.ToObject<Item>())
.ToList();

fiddle :https://dotnetfiddle.net/FtB3Cu


如果您想完全避免声明任何类,而是使用匿名类型,您可以将代码更改为:

var items = JObject.Parse(json)["rows"][0]
.Select(jt => new
{
name = (string)jt["name"],
time = (DateTime)jt["time"],
id = (string)jt["id"],
code = (string)jt["code"]
})
.ToList();

fiddle :https://dotnetfiddle.net/0QXUzZ

关于c# - 使用 JSON.net 将内部数组反序列化为对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36289762/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com