Du implementerar ReadJson
metod för omvandlaren felaktigt. existingValue
parametern ger dig inte det deserialiserade värdet som läses från JSON, det ger dig det befintliga värdet för objektet som du kommer att ersätta . I de flesta fall är detta null eller tomt. Vad du behöver göra är att använda reader
för att få värdet från JSON, konvertera det efter behov och returnera sedan det konverterade värdet.
Förutsatt ditt ObjectId
klass har en konstruktor som accepterar en hexadecimal sträng, här är hur du skulle implementera ReadJson
metod:
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
JToken token = JToken.Load(reader);
return new ObjectId(token.ToObject<string>());
}