sql >> Base de Datos >  >> NoSQL >> MongoDB

Json.NET deserializando Mongo ObjectId está dando el resultado incorrecto

Estás implementando el ReadJson método del convertidor incorrectamente. El existingValue El parámetro no le brinda el valor deserializado leído del JSON, le brinda el valor existente de el objeto que reemplazará . En la mayoría de los casos, será nulo o vacío. Lo que tienes que hacer es usar el reader para obtener el valor del JSON, conviértalo según sea necesario y luego devuelva el valor convertido.

Asumiendo su ObjectId class tiene un constructor que acepta una cadena hexadecimal, así es como implementaría 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>());
}