Handling null objects in custom JsonConverter’s ReadJson method

While writing the question, specifically while writing the “what have I tried” bit, I find one possible solution:

if (reader.TokenType == JsonToken.Null) return null;

I’m posting this for two reasons:

  1. If it’s good enough, it might help someone else with the same question.
  2. I might learn of a better, competing solution from someone else’s answer.

FWIW, here’s the full JsonConverter for very basic handling deserialization of a property whose type is an abstract class:

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<Cat>(serializer);
        if (jsonObject["StopPhrase"] != null) return jsonObject.ToObject<Parrot>(serializer);

        return null;
    }

    public override bool CanWrite { get { return false; } }

    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    { 
        throw new NotImplementedException(); 
    }
}

Leave a Comment