Json.NET JsonProperty的Converter和MemberConverter属性的区别
发布时间:2020-12-16 19:52:13 所属栏目:百科 来源:网络整理
导读:DefaultContractResolver.CreateProperty返回的JsonProperty类有两个转换器,Converter和MemberConverter的属性.我没有找到足够的解释,所以有什么区别呢?何时使用每一个?在合同解析器中设定什么属性?从 official documentation获取或设置成员转换器是没有
DefaultContractResolver.CreateProperty返回的JsonProperty类有两个转换器,Converter和MemberConverter的属性.我没有找到足够的解释,所以有什么区别呢?何时使用每一个?在合同解析器中设定什么属性?从
official documentation获取或设置成员转换器是没有帮助的.
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; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |