gpt4 book ai didi

C# 遍历 JSON 对象

转载 作者:行者123 更新时间:2023-12-05 05:03:44 25 4
gpt4 key购买 nike

我正在尝试使用 .Net Json 反序列化器 System.Text.Json 来迭代以下 Json 输入。

如果它是 json 结构中的顶层(见下文),我已经找到了按“person_id”进行迭代的方法,但我无法找到循环遍历所有下一级项目的方法.

我认为 NewtonSoft JArrayJObject 非常接近我的需要(我可能会追求它)但不确定 Microsoft 的解决方案是否有办法做到它...

Microsoft 的 System.Text.Json 库是否可行?

{
"0": {
"person_id": "0",
"last_name": "Greg",
"first_name": "Craig",
},
"1": {
"person_id": "1",
"last_name": "Doe",
"first_name": "John",
}
}

JsonElement 通过属性名称提取对象的解决方案(即我可以通过这种方式获取 John Doe 的信息)。

using (JsonDocument document = JsonDocument.Parse(jsonString))
{
JsonElement root = document.RootElement;

JsonElement studentsElement = root.GetProperty("1");
}

最佳答案

看起来类似于我之前必须处理的一些 JSON。这有助于记住 JSON 对象只是键/值对。

考虑到这一点,您拥有的数据结构可以解释为 Dictionary在 C# 中。

我用过 Newtonsoft.Json在我的示例中,但它们很容易交换使用 System.Text.Json .

在最简单的形式中,您可以使用:

var dictionary = JsonConvert.DeserializeObject<Dictionary<string, object>>(jsonString);

这会给你一个 Dictionary其中关键是 "0" , "1"属性,值为代表里面人物信息的对象。

然后您可以运行一个简单的 foreach遍历 Dictionary 或其键或值,如下所示:

foreach (var item in dictionary)
{
var key = item.Key;
var person = item.Value;
}

但是 person ( item.Value ) 仍然只是 object 类型.

在这里您可以创建一个类来表示每个 Person的信息,修饰属性以匹配 JSON 数据结构中的内容,如下所示:

public class Person 
{
[JsonProperty("person_id")]
public string PersonId { get; set; }

[JsonProperty("first_name")]
public string FirstName { get; set; }

[JsonProperty("last_name")]
public string LastName { get; set; }
}

并将您的 JSON 反序列化为 Dictionary<string, Person> :

var dictionary = JsonConvert.DeserializeObject<Dictionary<string, Person>>(jsonString);

这意味着字典中条目的每个值都是 Person 的一个实例,您可以访问每个属性的强类型属性,如下所示:

foreach (var item in dictionary)
{
var key = item.Key; // although you probably won't need this
Console.WriteLine(key);

var person = item.Value;
Console.WriteLine(person.PersonId);
Console.WriteLine(person.FirstName);
Console.WriteLine(person.LastName);
}

// which gives the following output:
> 0
> 0
> Craig
> Greg
> 1
> 1
> John
> Doe


虽然我用过Newtonsoft.Json上面,很容易“迁移”上面的示例以使用System.Text.Json .

  • 代替JsonConvert.DeserializeObject<T> , 使用 JsonSerializer.Deserialize<T> ;和
  • 而不是使用 [JsonProperty("property_name")]属性,你可以使用 [JsonPropertyName("property_name")] .

希望这对您有所帮助。

关于C# 遍历 JSON 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61497025/

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