反序列化JSON-如何忽略根元素?我正在使用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}]}我不想使用动态类型,我有我的班级诊断。Common.DiskSpaceInfo,我想在反序列化时使用它。我正在使用Json.NET(NetwonsoftJSON)。问题是如何告诉它忽略根元素(即“d”元素)并解析其中的内容。到目前为止,我最好的解决方案是使用匿名类型:DiskSpaceInfo[]result=JsonConvert.DeserializeAnonymousType(json,new{d=newDiskSpaceInfo[0]}).d;这确实有效,但我不太喜欢它。还有别的办法吗?我想要的是:DiskSpaceInfo[]result=JsonConvert.Deserialize(json,skipRoot:true);或类似的东西......如果你知道你在这种情况下搜索的“d”是根节点,那么你可以执行以下操作。JObjectjo=JObject.Parse(json);DiskSpaceInfo[]diskSpaceArray=jo.SelectToken("d",false).ToObject();如果你只是想忽略你不知道的根类,那么你可以使用“@GiuDo”解决方案,只需使用test2.ToObject();而不是Console.Write(test2);JObjecto=JObject.Parse(json);if(o!=null){vartest=o.First;if(test!=null){vartest2=test.First;if(test2!=null){DiskSpaceInfo[]diskSpaceArray=test2.ToObject();}}}根据前面的答案,我建议使用您自己的静态实用程序类。这是可重用的,将为您提供所需的语法。publicstaticclassJsonUtil{publicstaticTDeserialize(stringjson,boolignoreRoot)whereT:class{returnignoreRoot?JObject.Parse(json)?.Properties()?.First()?.Value?.ToObject():JObject.Parse(json)?.ToObject();你会这样称呼它:varresultA=JsonUtil.Deserialize(json,ignoreRoot:true);或varresultB=JsonUtil.Deserialize(json,ignoreRoot:false);通过Newtonsoft,我想你使用的是JSon.net,这是我的解决方案,我在这个框架中使用了LinqtoJSon:usingSystem;使用Newtonsoft.Json.Linq;namespaceJSonTest{classProgram{staticvoidMain(string[]args){stringjson=@"{""d"":[{""__type"":""DiskSpaceInfo:#Diagnostics.Common"",""AvailableSpace"":38076567552,""Drive"":""C:\"",""TotalSpace"":134789197824},{""__type"":""DiskSpaceInfo:#Diagnostics.Common"",""AvailableSpace"":166942183424,""Drive"":""D:\"",""TotalSpace"":185149157376}]}";JObjecto=JObject.Parse(json);if(o!=null){vartest=o.First;if(test!=null){vartest2=test.First;如果(测试t2!=null){Console.Write(test2);}}}控制台.Read();我使用属性First因为你需要找到d之后的第一个节点,这是你收到的json对于第一个节点你只需要创建一个重现Main的函数并且不要忘记检查对象是否是null以避免NullReferenceException。以上就是C#学习教程:反序列化JSON——如何忽略根元素?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
