gpt4 book ai didi

c# - 反序列化 Json 并访问结果

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

我有这个 Json:

{
"UpdatePack":"updatePacks\/1585654836.pack",
"Updates":[
{
"Name":"MsgBoxEx",
"version":"1.5.14.88",
"ChangeLog":"BugFix: Form didn't resize correct.",
"Hash":"5FB23ED83693A6D3147A0485CD13288315F77D3D37AAC0697E70B8F8C9AA0BB8"

},
{
"Name":"Utilities",
"version":"2.5.1.58",
"ChangeLog":"StringManagement updated.",
"Hash":"05E6B3F521225C604662916F50A701E9783E13776DE4FCA27BE4B69705491AC5"

}

]
}

我创建了 2 个用于反序列化它的类。
class UpdatesList
{
public string Name { get; set; }
public string Version { get; set; }
public string ChangeLog { get; set; }
public string Hash { get; set; }
}
class JsonObjectHolder
{
public string UpdatePack { get; set; }
//public Dictionary<int, MyData> { get; set; }
public Dictionary<int, UpdatesList> Updates { get; set; }
}

但是当我尝试访问字典时,我不断收到 Unhandled Exception: System.NullReferenceException: Object reference not set to an instance of an object. at " Console.WriteLine(jsonTest.Dict.Count);"
我反序列化是错误的,还是我需要做一些其他的事情来访问字典的结果?

我是 C# 和 Json 的新手。

我希望有人能指出我如何处理这个问题的正确方向。

我使用的是 Visual Studio 2019 最新更新和 .net 4.8。
问候
/LR

最佳答案

您的代码不起作用,因为 01标记只是一个属性,而不是数组项(它们周围没有方括号 [])。您可以使用 JObject 手动将这些值解析为所需的结构。

var json = JObject.Parse(your_json_string);
var dict = new Dictionary<int, UpdatesList>();
foreach (var item in json.Properties())
{
if (item.Value.Type == JTokenType.Object)
{
var index = int.Parse(item.Name);
var updateList = item.Value.ToObject<UpdatesList>();
dict.Add(index, updateList);
}
}

var holder = new JsonObjectHolder
{
UpdatePack = json["Updates"]?.Value<string>(),
Dict = dict
};

更新:根据 OP 对 JSON 所做的更改,它可能会更简单地反序列化

var list = json["Updates"]?.ToObject<List<UpdatesList>>();

var holder = new JsonObjectHolder
{
UpdatePack = json["UpdatePack"]?.Value<string>(),
Dict = list.Select((updatesList, index) => new { updatesList, index })
.ToDictionary(x => x.index, x => x.updatesList)
};

这里的要点是 Updates是一个项目数组,而不是键值集合。可以转化为 Dictionary<int, UpdatesList>使用 ToDictionary 方法来自 System.Linq (或直接使用 List<UpdatesList> 原样)

关于c# - 反序列化 Json 并访问结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60947793/

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