c# - 将 JSON 转换为对象,然后根据对象类型执行不同的操作

标签 c# json serialization

以前,我有一个 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 对象。 因此,返回值将是不同的类型,分别是JArrayJObject

关于c# - 将 JSON 转换为对象,然后根据对象类型执行不同的操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37406408/

相关文章:

c# - .NET Standard 2.0 连接到 Access 数据库

objective-c - 将 JSON 响应字典复制到 plist

c# - 序列化时忽略 XML 属性

serialization - protobuf数据的存储格式是什么?

jquery - 将 jsTree 与 MVC .net 结合使用

json - JSONRenderer无法序列化:b'{“id”:“11122211133311”}}不可JSON序列化

c# - 如何 "read"SWIFT 消息?

C# 相当于 Scala List 的带索引的 Zip?

c# - IIS 中托管的 tcp 端点的 WCF 路由

java - Jolt Conversion 需要将对象列表转换为以逗号分隔的 id 值对