首页 >后端开发 >C++ >如何使用 Json.net 反序列化基本类型和派生类型列表并保留其实际类型?

如何使用 Json.net 反序列化基本类型和派生类型列表并保留其实际类型?

DDD
DDD原创
2025-01-21 18:35:09949浏览

How Can I Deserialize a List of Base and Derived Types Using Json.net and Preserve Their Actual Types?

使用Json.net反序列化派生类型

假设您有一个基类Base和一个派生类Derived,其中Derived继承自Base。您有一个Base对象的列表,其中包含BaseDerived的实例。当您反序列化此列表的JSON表示形式时,您希望将派生类型检索为其实际类型,而不仅仅是作为Base对象。

为了实现这一点,Json.net提供了一个称为类型名称处理的功能。通过启用此功能并将其作为设置参数传递给序列化和反序列化操作,您可以指定对象类型应包含在序列化的JSON中。

<code class="language-csharp">Base object1 = new Base() { Name = "Object1" };
Derived object2 = new Derived() { Something = "Some other thing" };
List<Base> inheritanceList = new List<Base>() { object1, object2 };

JsonSerializerSettings settings = new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.All };
string Serialized = JsonConvert.SerializeObject(inheritanceList, settings);
List<Base> deserializedList = JsonConvert.DeserializeObject<List<Base>>(Serialized, settings);</code>

反序列化后,deserializedList将包含正确类型的BaseDerived对象。但是,启用类型名称处理有一个缺点:它会将所有对象和列表的名称包含在序列化的JSON中,这在某些情况下可能并不理想。

以上是如何使用 Json.net 反序列化基本类型和派生类型列表并保留其实际类型?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn