Вие внедрявате ReadJson
метод на конвертора неправилно. existingValue
параметърът не ви дава десериализираната стойност, прочетена от JSON, той ви дава съществуващата стойност на обекта, който ще замените . В повечето случаи това ще бъде нула или празно. Това, което трябва да направите, е да използвате reader
за да получите стойността от JSON, конвертирайте я според нуждите, след което върнете конвертираната стойност.
Приемаме вашия ObjectId
има конструктор, който приема шестнадесетичен низ, ето как бихте имплементирали ReadJson
метод:
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
JToken token = JToken.Load(reader);
return new ObjectId(token.ToObject<string>());
}