MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Die Json.NET-Deserialisierung von Mongo ObjectId liefert das falsche Ergebnis

Sie implementieren den ReadJson Methode des Konverters falsch. Der existingValue -Parameter gibt Ihnen nicht den aus JSON gelesenen deserialisierten Wert, sondern den vorhandenen Wert des Objekts, das Sie ersetzen werden . In den meisten Fällen ist dies null oder leer. Was Sie tun müssen, ist den reader zu verwenden Um den Wert aus JSON zu erhalten, konvertieren Sie ihn nach Bedarf und geben Sie dann den konvertierten Wert zurück.

Angenommen Ihre ObjectId Klasse einen Konstruktor hat, der einen Hex-String akzeptiert, hier ist, wie Sie den ReadJson implementieren würden Methode:

public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
    JToken token = JToken.Load(reader);
    return new ObjectId(token.ToObject<string>());
}