Newtonsoft(json)字符串NULL返回空串数组返回[]背景介绍:
在项⽬中,json序列化时不时会遇到这种需求:字符串类型,空值,不要返回NULL,返回“”;数组,空值返回[];对象,空值返回{}。(PS:如果在做⼿机项⽬,不建议空值还进⾏序列化,建议采⽤框架的处理思路:
NullValueHandling = NullValueHandling.Ignore ,这样明显能省⽹络流量)
(1)该问题⽹上了好久没到解决⽅案,⾃⼰看了json源码做了⼀个实现思路。
如果⾼⼿们知道其他的⽅法实现这个需求,望赐教,谢谢。
public class DynamicValueProviderEx : IValueProvider
{
protected readonly MemberInfo _memberInfo;
protected DynamicValueProvider _innerValueProvider;
public DynamicValueProviderEx(MemberInfo memberInfo)
{
_memberInfo = memberInfo;
_innerValueProvider = new DynamicValueProvider(memberInfo);
}
public Object GetValue(object target)
{
//在这⾥可以做很多处理,可以在序列化的时候对敏感数据进⾏屏蔽等等
Object value = _innerValueProvider.GetValue(target);
uniapp 字符串转数组if (value == null)
{
PropertyInfo property = _memberInfo as PropertyInfo;
FieldInfo field = property == null ? _memberInfo as FieldInfo : null;
Type memberType = property == null ? field.FieldType : property.PropertyType;
if (memberType == typeof(String))
return "";
else if (typeof(IEnumerable).IsAssignableFrom(memberType))
return new object[] { };
else if (memberType.IsClass)
return new object();
}
return value;
}
public void SetValue(object target, object value)
{
_innerValueProvider.SetValue(target, value);
}
}
⾃⼰再重写DefaultContractResolver的CreateMemberValueProvider⽅法,返回上⾯这个provider对象即可。
PS:对于datatable这种对象,⾃⼰实现⼀个Converter,在返回值的地⽅做⼿脚即可。这个源码不在这个电脑上,不贴了。
(2)源码下载
控制台测试程序。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论