U implementeert de ReadJson methode van de converter onjuist. De existingValue parameter geeft u niet de gedeserialiseerde waarde die wordt gelezen uit de JSON, maar geeft u de bestaande waarde van het object dat u gaat vervangen . In de meeste gevallen zal dit nul of leeg zijn. Wat u moet doen, is de reader . gebruiken om de waarde uit de JSON te halen, converteer deze indien nodig en retourneer de geconverteerde waarde.
Uitgaande van uw ObjectId class een constructor heeft die een hexadecimale tekenreeks accepteert, hier is hoe u de ReadJson zou implementeren methode:
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
JToken token = JToken.Load(reader);
return new ObjectId(token.ToObject<string>());
}