MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Json.NET desserializando Mongo ObjectId está dando o resultado errado


Você está implementando o ReadJson método do conversor incorretamente. O existingValue O parâmetro não fornece o valor desserializado lido do JSON, ele fornece o valor existente do objeto que você substituirá . Na maioria dos casos, isso será nulo ou vazio. O que você precisa fazer é usar o reader para obter o valor do JSON, converta-o conforme necessário e, em seguida, retorne o valor convertido.

Assumindo seu ObjectId classe tem um construtor que aceita uma string hexadecimal, aqui está como você implementaria o ReadJson método:
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
    JToken token = JToken.Load(reader);
    return new ObjectId(token.ToObject<string>());
}