OverridingPropertyValuesinaCustomJSON.netContractResolver我正在尝试实现一个自定义的JSON.netIContractResolver,它将使用指定的字符串替换所有空属性值。我知道这个功能可以通过序列化类型成员的属性来实现;这是我们正在考虑的替代路线。到目前为止,我的解析器实现如下。StringValueProvider是IValueProvider的简单实现,它不会影响问题,只是我不知道如何获取属性的值,因为我不知道这个提供成员实例的方法,所以我可以'不要将它作为参数传递给GetValue()(在代码示例中标记为WHAT-GOES-HERE?)。有什么方法可以让我从会员或财产那里得到我需要的东西吗?公共类NullSubstitutionPropertyValueResolver:DefaultContractResolver{privatereadonlystring_substitutionValue;publicNullSubstitutionPropertyValueResolver(stringsubstitutionValue){_substitutionValue=substitutionValue;}protectedoverrideJsonPropertyCreateProperty(MemberInfomember,MemberSerializationmemberSerialization){JsonPropertyresult=base.CreateProperty(member,memberSerialization);PropertyInfoproperty=memberasPropertyInfo;如果(属性==null){返回结果;}//我在这里用什么来获取属性值?布尔isNull=属性。GetValue(这里有什么?)==null;if(isNull){result.ValueProvider=newStringValueProvider(_substitutionValue);}返回结果;合同解析器与实例无关,它与类型有关。价值提供者专注于实例。在合同解析器中,您决定是否应根据属性类型将值提供程序应用于属性(例如,您可能只想在字符串属性上使用StringValueProvider?)然后,将值提供程序存储为一对属性(在构造函数将它与)中的替换值一起传递。在值提供者中,您可以从对象实例中读取值,检查它是否为空并执行适当的值替换。代码看起来应该是这样的:publicclassNullSubstitutionPropertyValueResolver:DefaultContractResolver{privatereadonlystring_substitutionValue;publicNullSubstitutionPropertyValueResolver(stringsubstitutionValue){_substitutionValue=substitutionValue;}protectedoverrideJsonPropertyCreateProperty(MemberInfomember,MemberSerializationmemberSerialization){JsonPropertyresult=base.CreateProperty(member,memberSerialization);PropertyInfoproperty=memberasPropertyInfo;如果(property.PropertyType==typeof(string)){result.ValueProvider=newStringValueProvider(property,_substitutionValue);}返回结果;}}publicclassStringValueProvider:IValueProvider{privatePropertyInfo_targetProperty;私有字符串_substitutionValue;publicStringValueProvider(PropertyInfotargetProperty,stringsubstitutionValue){_targetProperty=targetProperty;_substitutionValue=substitutionValue;}//SetValue在des期间被Json.Net调用序列化。//value参数是从JSON中读取的原始值;//target是要设置值的对象。publicvoidSetValue(objecttarget,objectvalue){_targetProperty.SetValue(target,value);}//GetValue在序列化期间由Json.Net调用。//target参数有要从中读取值的对象;//返回值是写入JSONpublicobjectGetValue(objecttarget){objectvalue=_targetProperty.GetValue(target);返回值==空?_substitutionValue:值;这里有一个工作演示:https://dotnetfiddle.net/PAZULK以上是C#学习教程:OverridingaCustomJSON.netContractParser中属性值共享的所有内容,如果有用你和你需要了解更多的C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。转载请注明出处:
