Stai implementando il ReadJson
metodo del convertitore in modo errato. Il existingValue
parametro non ti dà il valore deserializzato letto dal JSON, ti dà il valore esistente dell'oggetto che sostituirai . Nella maggior parte dei casi questo sarà nullo o vuoto. Quello che devi fare è usare il reader
per ottenere il valore dal JSON, convertilo secondo necessità, quindi restituisci il valore convertito.
Assumendo il tuo ObjectId
class ha un costruttore che accetta una stringa esadecimale, ecco come implementare il ReadJson
metodo:
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
JToken token = JToken.Load(reader);
return new ObjectId(token.ToObject<string>());
}