zoukankan      html  css  js  c++  java
  • Newtonsoft.Json 自定义 解析协议

    在开发web api的时候 遇到一个要把string未赋值默认为null的情况改成默认为空字符串的需求
    这种情况就需要自定义json序列话的 解析协议了

    Newtonsoft.Json默认的解析协议是DefaultContractResolver

    需要继承DefaultContractResolver 自定义解析协议了

     public class NullableValueProvider : IValueProvider
        {
            private readonly object _defaultValue;
            private readonly IValueProvider _underlyingValueProvider;
    
    
            public NullableValueProvider(MemberInfo memberInfo, Type underlyingType)
            {
                _underlyingValueProvider = new DynamicValueProvider(memberInfo);
                if (underlyingType != typeof(string))
                {
                    _defaultValue = Activator.CreateInstance(underlyingType);
                }
                else
                {
                    _defaultValue = string.Empty; // 特殊处理
                }
            }
    
            public void SetValue(object target, object value)
            {
                _underlyingValueProvider.SetValue(target, value);
            }
    
            public object GetValue(object target)
            {
                return _underlyingValueProvider.GetValue(target) ?? _defaultValue;
            }
        }
    
        public class SpecialContractResolver : DefaultContractResolver
        {
            protected override IValueProvider CreateMemberValueProvider(MemberInfo member)
            {
                if (member.MemberType == MemberTypes.Property)
                {
                    var pi = (PropertyInfo)member;
                    
                    if (pi.PropertyType == typeof(string))
                    {
                        return new NullableValueProvider(member, pi.PropertyType);
                    }
                }
                else if (member.MemberType == MemberTypes.Field)
                {
                    var fi = (FieldInfo)member;
                 
                    if (fi.FieldType == typeof(string))
                    {
                        return new NullableValueProvider(member, fi.FieldType);
                    }
                }
    
                return base.CreateMemberValueProvider(member);
            }
        }
    

    参考

  • 相关阅读:
    oracle闪回查询
    带搜索框的jQuery下拉框插件
    Eclipse、Tomcat、Spring3等使用过程的一些配置、错误等的总结记录
    局域网不能访问本机IIS网站的解决方法
    在同一台电脑部署多个Tomcat服务
    Tomcat重启脚本
    IE8下面parseInt('08')、parseInt('09')会转成0
    [转]Examining Open vSwitch Traffic Patterns
    [转]Ubuntu Precise
    [转] iptables
  • 原文地址:https://www.cnblogs.com/yahue/p/4935695.html
Copyright © 2011-2022 走看看