以前,我有一个 OrderedDictionary,我将它转换成 JSON,然后在代码的某些部分我需要将它反序列化回 OrderedDictionary。
现在,我需要将该属性的类型更改为列表。我需要做一个向后兼容性。我如何编写代码以便在反序列化 JSON 时将其反序列化为一个对象,然后我检查对象是否为 List,执行某些操作,否则如果对象为 OrderedDictionary,则执行某些操作。
目前,如果我将它反序列化为一个对象,我会得到一个 JObject。我正在使用 Newtonsoft.Json。
我期待的是这样的:
var x = JsonConvert.DeserializeAnonymousType(jsonString, new object());
if (x is List)
doSomething1();
else if (x is OrderedDictionary)
doSomething2();
最佳答案
在下面使用:
object x = JsonConvert.DeserializeObject(jsonString);
if (x is Newtonsoft.Json.Linq.JObject) // OrderedDictionary
doSomething1();
else if (x is Newtonsoft.Json.Linq.JArray) // List
doSomething2();
这仅适用于 Json.NET 并且 jsonString
也必须由 Json.NET 序列化字符串。
来自 Json.NET 的 Serialization Guide , List (implemented IList
) 将被序列化为 JSON 数组,OrderedDictionary
(implemented IDictionary
) 将被序列化为 JSON 对象。
因此,返回值将是不同的类型,分别是JArray
和JObject
。
关于c# - 将 JSON 转换为对象,然后根据对象类型执行不同的操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37406408/