gpt4 book ai didi

c# - 在 C# 中浏览动态对象 (json)

转载 作者:太空狗 更新时间:2023-10-29 21:38:19 24 4
gpt4 key购买 nike

我从 HTTP GET 请求中获取一个 json,在使用“NewtonSoft.Json”解析后看起来像这样:

dynamic data = JsonConvert.DeserializeObject(responseString);

responseString 在哪里:

{"name1":{"id":123456789,"name":"nickname","profileIconId":1114,"summonerLevel":30}}

如您所见,名称每次都在变化,我想知道如何像 data.name1.name 那样导航,其中 name1 每次都会变化。

如果 json 看起来像我该怎么办:

{"name1":{"id":123456789,"name":"nickname","profileIconId":1114,"summonerLevel":30},"name2":{"id":123456789,"name":"nickname","profileIconId":948,"summonerLevel":30}}

最佳答案

您可以反序列化为 JObject 而不是动态,这使您可以访问方便的属性,例如 First,它允许您在不知道属性名称的情况下遍历对象结构,以及迭代data 上的对象,根据您的编辑,使用 foreach 循环。

一旦达到所需的级别,您就可以使用 ToObject 扩展方法将 JObject 解析为强类型。

请注意,您需要包含 Newtonsoft.Json.Linq 命名空间。

using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

void Main()
{
var responseString = "{\"name1\":{\"id\":123456789,\"name\":\"nickname\",\"profileIconId\":1114,\"summonerLevel\":30},\"name2\":{\"id\":123456789,\"name\":\"nickname\",\"profileIconId\":948,\"summonerLevel\":30}}";
JObject data = JsonConvert.DeserializeObject<JObject>(responseString);
var names = new List<Name>();

foreach (var x in data) names.Add(x.Value.ToObject<Name>());
names.Dump();
}

public class Name
{
public int id { get; set; }
public string name { get; set; }
public int profileIconId { get; set; }
public int summonerLevel { get; set; }
}

如果您更喜欢 LINQ,您始终可以根据 JObject 上的 Values() 方法检索值并选择每个成员。

var names = data.Values().Select(x => x.ToObject<Name>()).ToList();

这会产生以下 Name 对象集合。

enter image description here

关于c# - 在 C# 中浏览动态对象 (json),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38022221/

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