Klasa JsonProperty
zwrócona przez DefaultContractResolver.CreateProperty
ma dwie właściwości dotyczące konwertera, Converter
i MemberConverter
. Nie znajduję wystarczająco dużo wyjaśnień na ich temat, więc jaka jest różnica między nimi? Kiedy używać każdego? Jaką właściwość ustawić w rozstrzygającym zamówieniu? "Pobiera lub ustawia konwerter elementów" z official documentation nie jest pomocny.Różnica między właściwościami konwertera i obiektu MemberConverter Json.troperty Json.Troperty
10
A
Odpowiedz
2
Wygląda na to, że NS.Json obsługuje konwertery overridable; prawdopodobnie jest tak, że każda pojedyncza właściwość nie musi określać JsonConvertera, ale może w razie potrzeby go zastąpić.
wskazówki można znaleźć w źródle:
Od DefaultContractResolver.cs linia 1254:
private void SetPropertySettingsFromAttributes(JsonProperty property, object attributeProvider, string name, Type declaringType, MemberSerialization memberSerialization, out bool allowNonPublicAccess)
{
...
// resolve converter for property
// the class type might have a converter but the property converter takes presidence
property.Converter = JsonTypeReflector.GetJsonConverter(attributeProvider);
property.MemberConverter = JsonTypeReflector.GetJsonConverter(attributeProvider);
I od JsonSerializerInternalReader.cs, line 348:
private JsonConverter GetConverter(JsonContract contract, JsonConverter memberConverter, JsonContainerContract containerContract, JsonProperty containerProperty)
{
JsonConverter converter = null;
if (memberConverter != null)
{
// member attribute converter
converter = memberConverter;
}
else if (containerProperty != null && containerProperty.ItemConverter != null)
{
converter = containerProperty.ItemConverter;
}
else if (containerContract != null && containerContract.ItemConverter != null)
{
converter = containerContract.ItemConverter;
}
else if (contract != null)
{
JsonConverter matchingConverter;
if (contract.Converter != null)
// class attribute converter
converter = contract.Converter;
else if ((matchingConverter = Serializer.GetMatchingConverter(contract.UnderlyingType)) != null)
// passed in converters
converter = matchingConverter;
else if (contract.InternalConverter != null)
// internally specified converter
converter = contract.InternalConverter;
}
return converter;
}
2
Mam otwarty problem o docs na to tutaj github.com/JamesNK/Newtonsoft.Json/issues/363.
Ale jedną oczywistą różnicą między nimi (oczywiste z kodu źródłowego) jest to, że Konwerter jest używany tylko podczas serializacji i MemberConverter tylko przy deserializacji. Nie wiem, czy to cała historia, a nazywanie wiele mówi.
Powiązane problemy
- 1. Jaka jest różnica między Hashtable a właściwościami?
- 2. Różnica między właściwościami akcesor i właściwością danych w ECMAScript?
- 3. Różnica między właściwościami EnableRowVirtualization i VirtualizingStackPanel.IsVirtualizing WPF DataGrid
- 4. Jaka jest różnica między właściwościami auto-gettera i właściwościami treści wyrażenia?
- 5. Różnica między "{" i "[" podczas formatowania obiektu JSON
- 6. szybki sposób uzyskać min/max wartości między właściwościami obiektu
- 7. Jaka jest różnica między właściwościami a wzorcami w schemacie JSON?
- 8. Różnica pomiędzy właściwościami klasy i prototyp funkcji w JavaScript
- 9. Różnica między Session i HttpContext.Current.Session
- 10. Różnica między EOT lite i EOT skompresowanym
- 11. Różnica między NSOutlineView i NSTableView
- 12. Różnica między fragmentem klasy a fragmentem obiektu
- 13. Różnica między wzorcem adaptera obiektu i wzorcem adaptera klasy
- 14. Różnica między inicjowaniem klasy a instancją obiektu?
- 15. Jaka jest różnica między właściwościami CurrentCulture i CurrentUICulture CultureInfo w .NET?
- 16. Wiązanie XAML: powiązanie z właściwościami obiektu "globalnego"
- 17. Różnica między unwrapObservable i()
- 18. Różnica między "**/* /" i "** /"?
- 19. Różnica między | = i^= css
- 20. Composer.phar różnica między | i ||
- 21. Różnica między "% ~ dp0" i ". \"?
- 22. Różnica między ". +" I ". +?"
- 23. MySQL: Różnica między ",", "i"
- 24. Różnica między (++ i) oraz (i ++)
- 25. różnice między właściwościami stereotypów a wartościami znaczników
- 26. Różnica kręgosłupa Różnica między CompositeView i CollectionView?
- 27. Jak przechodzić między wszystkimi właściwościami klasy?
- 28. Jaka jest różnica między NSLayoutAttributeBaseline i NSLayoutAttributeBottom?
- 29. Różnica między definiowaniem i przypisywaniem właściwości
- 30. Jaka jest różnica między GetBlobReference i GetBlobReferenceFromServer?
Mam do czynienia z problemem niejednoznaczności, gdy zaimplementowałem niestandardowy resolver umowy. Okazało się, że ustawienie 'Konwertera' nie wystarczy, aby Json.NET zadzwonił do konwertera ... – Athari