Il JsonProperty
classe restituita dal DefaultContractResolver.CreateProperty
ha due proprietà di circa convertitore, Converter
e MemberConverter
. Non trovo abbastanza spiegazioni su di loro, quindi qual è la differenza tra loro? Quando usarli? Quale proprietà impostare nel resolver del contratto? "Ottiene o imposta il convertitore membro" da official documentation non è utile.La differenza tra convertitore e MemberConverter proprietà di del Json.NET JsonProperty
10
A
risposta
2
Sembrerebbe che NS.Json supporta convertitori Overridable; presumibilmente questo è così che ogni singola proprietà non deve specificare un JsonConverter, ma possono sovrascriverlo se necessario.
suggerimenti possono essere trovati nella fonte:
Da DefaultContractResolver.cs, linea 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);
E da 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
Ho aperto un problema circa la documentazione su questo qui github.com/JamesNK/Newtonsoft.Json/issues/363.
Ma una differenza evidente tra loro (chiaramente dal codice sorgente, che è) è che catalitica è utilizzata soltanto quando serializzazione e solo quando MemberConverter deserializzazione. Non so se questa è la storia completa, e la denominazione dice molto.
Problemi correlati
- 1. Differenza tra DataMember e JsonProperty in webapi2
- 2. Nessun costruttore Json.net con impostazioni e parametri del convertitore
- 3. Serializzare la proprietà, ma non deserializzare la proprietà in Json.Net
- 4. Qual è la differenza tra PreserveReferencesHandling e ReferenceLoopHandling in Json.Net?
- 5. Differenza tra instanceof e la proprietà del costruttore
- 6. Come si ottiene il nome di JsonProperty in JSON.Net?
- 7. Differenza tra interpolazione e legame di proprietà
- 8. Differenza tra la modifica di una variabile e una proprietà
- 9. Qual è la differenza tra KVC e proprietà?
- 10. json.net proprietà richiesta non trovata in JSON
- 11. Come ignorare JsonProperty (PropertyName = "someName") durante la serializzazione di json?
- 12. Differenza tra metodo GetGetMethod e proprietà GetMethod?
- 13. La differenza tra $ * e $ @
- 14. Socket.io, differenza tra socket.set() e la proprietà socket?
- 15. Qual è la differenza tra "attributo" e "proprietà" nel restkit
- 16. Qual è la differenza tra un Hashtable e le Proprietà?
- 17. qual è la differenza tra proprietà statica e singleton?
- 18. Differenza tra proprietà accessoria e proprietà dati in ECMAScript?
- 19. Qual è la differenza tra la proprietà '[]' e la proprietà '@each' in ember.js?
- 20. Abilita/disabilita l'utilizzo del nome [JsonProperty] specificato
- 21. Come serializzare enumerazioni a diverso nome della proprietà utilizzando json.net
- 22. Json.net rinomina proprietà
- 23. Differenza tra la firma del codice di destinazione e progetto
- 24. Differenza del valore, prototipo e proprietà
- 25. Qual è la differenza tra JSON.NET DataContractJsonSerializer e il serializzatore JSON Newtonsoft
- 26. Qual è la differenza tra proprietà auto solo getter e proprietà body expression?
- 27. Differenza tra attributi di proprietà nell'obiettivo
- 28. Qual è la differenza tra la cache di HttpContext e le proprietà degli elementi?
- 29. La differenza tra GotFocus e GotKeyboardFocus
- 30. Qual è la differenza tra la discesa del gradiente e la discesa del gradiente di Newton?
Ho affrontato il problema di ambiguità quando ho implementato contratto di risoluzione personalizzato. Si è scoperto che l'impostazione 'Convertitore' non è sufficiente per fare in modo che Json.NET chiami il convertitore ... – Athari