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);
            }
        }
    

    参考

  • 相关阅读:
    服务器性能监控工具(MQTT协议)
    最近很烦
    开关柜无线测温数据中心后台
    合宙DTU数据流模板modbus lua脚本生成器
    4G无线-潮信报警器
    4G无线-sever酱报警器
    url_for函数——快速寻找url
    完整版模板项目实战【实战演练】
    忽略这1点,代码写的再好也没用
    不会汇报工作,工作做得再好也白瞎
  • 原文地址:https://www.cnblogs.com/yahue/p/4935695.html
Copyright © 2011-2022 走看看