Tag: deserialization json.net

如何使用Newtonsoft反序列化可以是数组或字典的对象?

我正在使用一个API来返回我需要反序列化的json对象。 我的问题是这些对象的一个​​成员有时是一个空数组(“[]”),有时是一个字典(“{”1“:{…},”2“:{…}}” )。 我想将它反序列化为数组或字典,因为我不关心ID,我只想要所有对象的列表。 这是我如何反序列化对象: var response = JsonConvert.DeserializeObject(json); 这是Response类的定义: public class Response { [JsonProperty(PropertyName = “variations”)] public Dictionary Variations { get; set; } } 当Response在其变体字段中包含字典时它很有效,但是当它包含一个空数组时它会失败。 我从Newtonsoft得到一个错误,说数组不能被反序列化为字典。 如果我将Variations属性定义为数组,它适用于空数组,但是当它是字典时它会失败。 我可以做什么来正确地反序列化两个可能的值,或者忽略空数组并将Variations设置为null,当它是一个数组而不是失败时。 谢谢。

反序列化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 } ]} 我不想使用动态类型,我有我的类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); 或类似的东西…