gpt4 book ai didi

c# - 反序列化 JSON - 如何忽略根元素?

转载 作者:IT王子 更新时间:2023-10-29 04:34:54 27 4
gpt4 key购买 nike

我正在使用 WCF 服务,该服务返回包含在“d”根元素中的 JSON 结果。 JSON 响应如下所示:

{"d":[
{
"__type":"DiskSpaceInfo:#Diagnostics.Common",
"AvailableSpace":38076567552,
"Drive":"C:\\",
"TotalSpace":134789197824
},
{
"__type":"DiskSpaceInfo:#Diagnostics.Common",
"AvailableSpace":166942183424,
"Drive":"D:\\",
"TotalSpace":185149157376
}
]}

我不想使用动态类型,我有我的类 Diagnostics.Common.DiskSpaceInfo,我想在反序列化时使用它。

我正在使用 Json.NET (Netwonsoft JSON)。

问题是如何告诉它忽略根元素(即“d”元素)并解析其中的内容。

到目前为止,我最好的解决方案是使用匿名类型:

DiskSpaceInfo[] result = JsonConvert.DeserializeAnonymousType(json, new
{
d = new DiskSpaceInfo[0]
}).d;

这确实有效,但我不太喜欢它。还有别的办法吗?我想要的是这样的:

DiskSpaceInfo[] result = JsonConvert.Deserialize(json, skipRoot: true);

或者类似的东西......

最佳答案

如果您知道要搜索什么,在本例中“d”是根节点,那么您可以执行以下操作。

JObject jo = JObject.Parse(json);
DiskSpaceInfo[] diskSpaceArray = jo.SelectToken("d", false).ToObject<DiskSpaceInfo[]>();

如果您只是想忽略您不知道的根类,那么您可以使用"@Giu Do" 解决方案,您可以使用test2.ToObject<DiskSpaceInfo[]>();而不是 Console.Write(test2);

        JObject o = JObject.Parse(json);
if (o != null)
{
var test = o.First;
if (test != null)
{
var test2 = test.First;
if (test2 != null)
{
DiskSpaceInfo[] diskSpaceArray = test2.ToObject<DiskSpaceInfo[]>();
}
}
}

关于c# - 反序列化 JSON - 如何忽略根元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13702657/

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