MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Json.NET deserializzare Mongo ObjectId sta dando il risultato sbagliato

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>());
}