Używam Json.NET (6.0.3) do serializacji. Napisałem niestandardowy JsonConverter TestConverter
, który obsługuje instancje niektórych BaseClass
(konwertując je na liczbę całkowitą id iz powrotem). Wszystko działa poprawnie, gdy przypisuję właściwości w moich klasach pod numerem JsonConverter[typeof(TestConverter)]
.Niestandardowy JsonConverter jest ignorowany w przypadku deserializacji, gdy używany jest niestandardowy resolver umowy zamiast JsonConverter.
Wolałbym jednak użyć niestandardowego przelicznika umowy, który powinien, zgodnie z documentation, być w stanie w pełni zastąpić użycie wszystkich atrybutów.
Oto jak skonfigurować resolwer zamówienia:
protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization)
{
var property = base.CreateProperty(member, memberSerialization);
if (typeof(BaseClass).IsAssignableFrom(property.PropertyType))
{
property.Converter = new TestConverter();
}
return property;
}
wszystko działa dobrze dla serializacji, jednak wydaje się, że przetwornica skonfigurować w rezolwerem zamówienia są całkowicie ignorowane podczas deserializacji. Metoda ReadJson
z dnia TestConverter
nigdy nie jest wywoływana.
Czy brakuje mi czegoś naprawdę oczywistego? Czy muszę dołączyć konwerter do nieruchomości w innym miejscu?
Stworzyłem mały przykład, który demonstruje problem. Jeśli zostanie zakomentowany atrybut [JsonConverter]
w linii 57, program ulegnie awarii z wyjątkiem, ponieważ Json.net próbuje przekonwertować liczbę całkowitą na obiekt, zamiast korzystać z TestConverter
. Źródło dla przykładu można znaleźć tutaj: http://pastebin.com/xgVS6hXY
Z góry dziękujemy za pomoc!
Dziękuję, to działa. Czy zdajesz sobie sprawę, jaka jest różnica między tymi dwoma elementami/dlaczego potrzebuję dwóch ustawień? Znalazłem [to] (http://stackoverflow.com/questions/18330008/the-difference-between-converter-and-memberconverter-properties-of-json-nets-js) Pytanie SO, ale to naprawdę nie pomaga . – Jonas