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