将JSON反序列化为子类

编程入门 行业动态 更新时间:2024-10-28 01:14:04
本文介绍了将JSON反序列化为子类的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我有3个班级:

class Person { public bool IsFemale { get; set; } } class Female : Person { public string FemaleSpecificProperty { get; set; } } class Male: Person { public string MaleSpecificProperty { get; set; } }

如何基于Person.IsFemale属性的值将给定的JSON字符串反序列化为特定实例(Female或Male)? (前期我不知道使用了哪种确切类型,并且该属性是唯一的指示)

How can I deserialize given JSON string into specific instances (Female or Male) based on the value of Person.IsFemale property? (upfront I dont know which exact type has been used and that property is the only indication)

我看过雇用CustomCreationConverter<T>的人,但不知道如何在这里工作.

I looked at employing CustomCreationConverter<T> but couldn't figure out how to make it work here.

推荐答案

这里是您的人员类别的转换器.它获取IsFemale字段值,并基于它创建Female或Male个人,并由序列化程序填充:

Here is converter for your person class. It gets IsFemale field value, and based on it creates Female or Male person, which is populated by serializer:

public class PersonConverter : JsonConverter { public override bool CanConvert(Type objectType) { return typeof(Person).IsAssignableFrom(objectType); } public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { JObject jObject = JObject.Load(reader); var isFemale = (bool)jObject["IsFemale"]; Person target = isFemale ? (Person)new Female() : new Male(); serializer.Populate(jObject.CreateReader(), target); return target; } public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { throw new NotImplementedException(); } }

用法:

List<Person> people = new List<Person> { new Male { IsFemale = false, MaleSpecificProperty = "Y" }, new Male { IsFemale = false, MaleSpecificProperty = "Y" }, new Female { IsFemale = true, FemaleSpecificProperty = "X" } }; string json = JsonConvert.SerializeObject(people); var result = JsonConvert.DeserializeObject<List<Person>>(json, new PersonConverter());

还要看一下alex提出的问题:如何实现自定义JsonConverter

Also take a look on question suggested by alex: How to implement custom JsonConverter

更多推荐

将JSON反序列化为子类

本文发布于:2023-08-04 05:52:45,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1293530.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:子类   序列   JSON

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!