zoukankan      html  css  js  c++  java
  • ASP.NET Core学习之六 JSON全局配置

    Startup

    全局配置Json序列化处理

    1.忽略循环引用
    2.long转string

    //全局配置Json序列化处理
        services.AddJsonOptions(options =>
                { 
                    //忽略循环引用
                    options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
                    options.SerializerSettings.Converters.Add(new Common.LongConvert());//Long类型转换
                    //在这里日期类格式化处理是不起作用的 
                    //不返回值为NULL的属性,甚用啊,数据要很严谨
                    //options.SerializerSettings.NullValueHandling = NullValueHandling.Ignore;
                });
    

    数据处理

    1.时间格式
    2.string null转空

    Startup

     services.PostConfigure<MvcJsonOptions>(options =>
                {
                    options.SerializerSettings.ContractResolver = new CustomContractResolver(); 
                });
    
    

    自定义转换

    CustomContractResolver

     /// <summary>
    /// Json序列化转换器
    /// </summary>
    public class CustomContractResolver : AbpCamelCasePropertyNamesContractResolver
    {
        protected override void ModifyProperty(MemberInfo member, JsonProperty property)
        {
            if (property.PropertyType == typeof(DateTime) || property.PropertyType == typeof(DateTime?))
            {
                property.Converter = new AbpDateTimeConverter()
                { DateTimeFormat = "yyyy-MM-dd HH:mm:ss" };
            }
            else
            {
                base.ModifyProperty(member, property);
            }
        }
        protected override IList<JsonProperty> CreateProperties(Type type, MemberSerialization memberSerialization)
        {
            return type.GetProperties()
                .Select(p =>
                {
                    var jp = base.CreateProperty(p, memberSerialization);
                    jp.ValueProvider = new NullToEmptyStringValueProvider(p);
                    return jp;
                }).ToList();
        }
    }
    
    /// <summary>
    /// NULL转为空字符串
    /// </summary>
    public class NullToEmptyStringValueProvider : IValueProvider
    {
        PropertyInfo _MemberInfo;
        public NullToEmptyStringValueProvider(PropertyInfo memberInfo)
        {
            _MemberInfo = memberInfo;
        }
    
        public object GetValue(object target)
        {
            object result = _MemberInfo.GetValue(target);
            if (result == null && _MemberInfo.PropertyType.FullName == "System.String") result = "";
            return result;
    
        }
    
        public void SetValue(object target, object value)
        {
            _MemberInfo.SetValue(target, value);
        }
    }
    

    json序列化小驼峰格式

    属性名首字母为小写

    var setting = new JsonSerializerSettings
    {
        ContractResolver = new Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver()
    };
    var json = JsonConvert.SerializeObject(resp, Formatting.None, setting);
    
  • 相关阅读:
    js_闭包
    js_函数参数的相关问题
    js_浏览器控制台打印引用数据是打印的原始数据
    js_递归函数在严格模式下的调用方法
    js_执行环境及作用域
    js_关于为什么'函数的参数都是按值传递'的理解
    (项目)爬取安居客二手房房屋信息
    (项目)爬取自如租房链接的价格
    识别验证码之百度通用识别接口
    (项目)使用selenium的截屏功能实现自动登陆滴滴打码网
  • 原文地址:https://www.cnblogs.com/xcsn/p/13467018.html
Copyright © 2011-2022 走看看