将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; }
}

如何根据property的值将给定的JSON字符串反序列化为特定的实例(FemaleMalePerson.IsFemale(预先我不知道使用了哪个确切类型,并且该属性是唯一的指示)

我看了一下应用程序,CustomCreationConverter<T>但不知道如何使它在这里工作。

谢尔盖·别列佐夫斯基(Sergey Berezovskiy)

这是您的人员班级的转换器。它获取IsFemale字段值,并基于它创建FemaleMale人,由序列化器填充:

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何将json对象反序列化为特定的子类?

来自分类Dev

使用Newtosoft Json将Json反序列化为null

来自分类Dev

如何将json反序列化为PropertyType?

来自分类Dev

将JSON对象反序列化为类

来自分类Dev

将JSON反序列化为多个属性

来自分类Dev

放心-将响应JSON反序列化为List <POJO>

来自分类Dev

无法将当前的json数组反序列化为type

来自分类Dev

将Json Property的属性反序列化为Property

来自分类Dev

将JSON反序列化为C#对象

来自分类Dev

将JSON数组反序列化为对象的Swift数组

来自分类Dev

将JSON反序列化为C#类

来自分类Dev

将Json对象反序列化为列表?

来自分类Dev

将JSON字符反序列化为枚举

来自分类Dev

将JSON反序列化为类型化类

来自分类Dev

C#将JSON反序列化为列表

来自分类Dev

Gson:将Json反序列化为抽象类

来自分类Dev

将JSON反序列化为扁平化的类

来自分类Dev

将JSON反序列化为抽象类

来自分类Dev

将JSON反序列化为对象C#

来自分类Dev

将嵌套的JSON反序列化为C#对象

来自分类Dev

将JSON对象反序列化为数组

来自分类Dev

将JSON反序列化为C#类

来自分类Dev

如何将JSON反序列化为Swift对象?

来自分类Dev

将JSON反序列化为对象时出错

来自分类Dev

Xamarin.Forms将json反序列化为对象

来自分类Dev

将Json反序列化为对象异常

来自分类Dev

将嵌套的JSON反序列化为列表

来自分类Dev

无法将JSON反序列化为强类型对象

来自分类Dev

将复杂的json反序列化为类似字典的结构