Nik*_*iou 21 .net c# json.net deserialization
我正在使用一个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
}
]}
Run Code Online (Sandbox Code Playgroud)
我不想使用动态类型,我有我的类Diagnostics.Common.DiskSpaceInfo,我想在反序列化时使用.
我正在使用Json.NET(Netwonsoft JSON).
问题是如何告诉它忽略根元素(即'd'元素)并解析其中的内容.
我到目前为止最好的解决方案是使用匿名类型:
DiskSpaceInfo[] result = JsonConvert.DeserializeAnonymousType(json, new
{
d = new DiskSpaceInfo[0]
}).d;
Run Code Online (Sandbox Code Playgroud)
这实际上有效,但我不太喜欢它.还有另外一种方法吗?我想要的是:
DiskSpaceInfo[] result = JsonConvert.Deserialize(json, skipRoot: true);
Run Code Online (Sandbox Code Playgroud)
或类似的东西...
key*_*eyr 19
如果您知道在这种情况下搜索的内容"d"是一个根节点,那么您可以执行以下操作.
JObject jo = JObject.Parse(json);
DiskSpaceInfo[] diskSpaceArray = jo.SelectToken("d", false).ToObject<DiskSpaceInfo[]>();
Run Code Online (Sandbox Code Playgroud)
如果您只是想忽略您不知道的根类,那么您可以使用"@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[]>();
}
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
12407 次 |
最近记录: |