在写这个问题时,特别是在编写"我试过的东西"位时,我找到了一个可能的解决方案:
if (reader.TokenType == JsonToken.Null) return null;
我发布这个有两个原因:
如果它足够好,它可能会帮助其他人有同样的问题.
我可能会从其他人的答案中了解到更好的竞争解决方案.
FWIW,这里是完整的JsonConverter,用于对类型为抽象类的属性进行非常基本的处理反序列化:
public class PetConverter : JsonConverter { public override bool CanConvert(Type objectType) { return objectType == typeof(Animal); } public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { if (reader.TokenType == JsonToken.Null) return null; JObject jsonObject = JObject.Load(reader); if (jsonObject["Lives"] != null) return jsonObject.ToObject(serializer); if (jsonObject["StopPhrase"] != null) return jsonObject.ToObject (serializer); return null; } public override bool CanWrite { get { return false; } } public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { throw new NotImplementedException(); } }