首页 > 后端开发 > C++ > 如何在保留类型信息的同时反序列化 JSON.NET 中的派生类型?

如何在保留类型信息的同时反序列化 JSON.NET 中的派生类型?

Mary-Kate Olsen
发布: 2025-01-21 18:46:14
原创
723 人浏览过

How Can I Deserialize Derived Types in JSON.NET While Preserving Type Information?

Json.net派生类型反序列化

在处理JSON数据时,序列化和反序列化遵循基类-派生类关系的对象可能很有优势。但是,Json.net(Newtonsoft)需要特定的配置才能有效地处理派生类型。

问题:

考虑以下基类和派生类:

<code>public class Base
{
    public string Name;
}
public class Derived : Base
{
    public string Something;
}</code>
登录后复制

如果您尝试将包含基类和派生类对象的JSON字符串反序列化为List<Base>,您只会得到基类对象,从而丢失派生类型信息。

解决方案:

要成功反序列化派生类型,您需要启用类型名称处理。这可以通过创建一个JsonSerializerSettings对象并将TypeNameHandling属性设置为All来实现。将此设置对象传递给序列化和反序列化操作:

<code>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>
登录后复制

通过启用类型名称处理,Json.net将在JSON字符串中包含类型信息。在反序列化期间,它将使用此信息正确地重新创建派生对象并填充deserializedList

注意: 使用此方法会在序列化数据中公开所有对象的名称以及列表本身。如果这是个问题,请考虑处理多态关系的替代方法。

以上是如何在保留类型信息的同时反序列化 JSON.NET 中的派生类型?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板