使用Json.net反序列化派生类型
假设您有一个基类Base
和一个派生类Derived
,其中Derived
继承自Base
。您有一个Base
对象的列表,其中包含Base
和Derived
的实例。当您反序列化此列表的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
将包含正确类型的Base
和Derived
对象。但是,启用类型名称处理有一个缺点:它会将所有对象和列表的名称包含在序列化的JSON中,这在某些情况下可能并不理想。
以上是如何使用 Json.net 反序列化基本类型和派生类型列表并保留其实际类型?的详细内容。更多信息请关注PHP中文网其他相关文章!