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