DefaultContractResolver.CreateProperty
返回的JsonProperty
類具有關於轉換器的兩個屬性,Converter
和MemberConverter
。我沒有找到足夠的解釋,所以他們之間有什麼區別?何時使用每一個?在合同解析器中設置什麼屬性? 「獲取或設置成員轉換器」來自official documentation沒有幫助。Json.NET的JsonProperty的轉換器和MemberConverter屬性之間的區別
10
A
回答
2
看來,NS.Json支持覆蓋轉換器;大概是這樣,每個單獨的屬性不必指定一個JsonConverter,但如果需要的話,它們可能會覆蓋它。
從DefaultContractResolver.cs,線路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);
而且從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
我開了一個問題有關的文檔這裏這裏github.com/JamesNK/Newtonsoft.Json/issues/363。
但是它們之間的一個明顯的區別(從源代碼中看得很清楚)是Converter僅在串行化和僅在反序列化時才使用MemberConverter。我不知道這是否是完整的故事,而且命名的確很多。
相關問題
- 1. webapi2中DataMember和JsonProperty之間的區別
- 2. SPQuery:Query和ViewXml屬性之間的區別?
- 3. JSON.NET忽略我的所有屬性,而屬性JsonProperty
- 4. 在MATLAB中的過濾器和轉換之間的區別
- 5. 輸入屬性和可預測屬性之間的區別
- 6. 屬性指令和元素屬性語法之間的區別?
- 7. 屬性之間的區別File,Yaml&Json?
- 8. 類型轉換和類型轉換之間的區別?
- 9. ECMAScript中訪問器屬性和數據屬性之間的區別?
- 10. Java的:新的屬性(...)和新的屬性()之間的區別的putAll(...)
- 11. objective-c中的屬性屬性之間的區別
- 12. CAMediaTiming中的kCAFillModeRemoved和CAAnimation的removedOnCompletion屬性之間的區別
- 13. WPF DataGrid的EnableRowVirtualization和VirtualizingStackPanel.IsVirtualizing屬性之間的區別
- 14. python中的實例變量和屬性之間的區別?
- 15. MSBuild的目標屬性和目標標記之間的區別
- 16. Java的屬性:.propertyNames()和.stringPropertyNames()之間的區別?
- 17. Ruby中的屬性和base_attributes之間的區別?
- 18. NameValueCollection上的屬性Keys和AllKeys之間的區別是什麼?
- 19. 將狀態綁定到屬性的[]和{{}}之間的區別?
- 20. Linux和Windows中的adobe打印屬性之間的區別
- 21. lxml中的屬性和樣式標籤之間的區別
- 22. Vala中的函數和屬性之間的區別
- 23. WKInterfaceLabel的已安裝和隱藏屬性之間的區別
- 24. Flex中組件的visible和includeInLayout屬性之間的區別
- 25. jsp的class和beanName屬性之間的區別:useBean
- 26. Backbone.Model.Initialize中的屬性和選項之間的區別是什麼
- 27. 賦值和替換之間的區別
- 28. 之間的〜/和的區別../
- 29. 關於ASP.NET TextBox控件的TextChanged屬性和AutoPostBack屬性之間的區別
- 30. R中的惰性和替換之間的區別
我在實現自定義合約解析器時遇到了模糊問題。事實證明,設置'Converter'不足以使Json.NET調用轉換器... – Athari