MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Json.NET désérialise Mongo ObjectId donne le mauvais résultat

Vous implémentez le ReadJson méthode du convertisseur de manière incorrecte. La valeur existingValue Le paramètre ne vous donne pas la valeur désérialisée lue à partir du JSON, il vous donne la valeur existante de l'objet que vous allez remplacer . Dans la plupart des cas, ce sera nul ou vide. Ce que vous devez faire est d'utiliser le reader pour obtenir la valeur du JSON, convertissez-la si nécessaire, puis renvoyez la valeur convertie.

En supposant que votre ObjectId class a un constructeur qui accepte une chaîne hexadécimale, voici comment implémenter le ReadJson méthode :

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