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