这是您的人类转换器。它得到IsFemale
字段值,并在此基础上创建Female
或Male
人,这是由串行填充:
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建议看看:How to implement custom JsonConverter
看看http://stackoverflow.com/questions/8030538/how-to-implement-custom-jsonconverter-in-json-net-to-deserialize-a-list-of-base – alex