zoukankan      html  css  js  c++  java
  • Newtonsoft.Json 自定义序列化格式转化器

     public static  class JsonHelper
        {
            static JsonHelper()
            {
                Newtonsoft.Json.JsonSerializerSettings setting = new Newtonsoft.Json.JsonSerializerSettings();
                JsonConvert.DefaultSettings = new Func<JsonSerializerSettings>(() =>
                {
                    //日期类型默认格式化处理
                    setting.DateFormatHandling = Newtonsoft.Json.DateFormatHandling.MicrosoftDateFormat;
                    setting.DateFormatString = "yyyy-MM-dd HH:mm:ss";
    
                  
                    //空值处理
                    setting.NullValueHandling = NullValueHandling.Ignore;
    
                    //高级用法九中的Bool类型转换 设置
                    //setting.Converters.Add(new BoolConvert("是,否"));
    
                    if (setting.Converters.FirstOrDefault(p=>p.GetType()==typeof(JsonCustomDoubleConvert))==null)
                    {
                        setting.Converters.Add(new JsonCustomDoubleConvert(3));
                    }
    
                    return setting;
                });
            }
    
            public static String ToJsonStr<T>(this T obj) where T : class
            {
                if (obj == null)
                    return string.Empty;
                return JsonConvert.SerializeObject(obj, Formatting.Indented);
    
            }
            public static T ToInstance<T>(this String jsonStr) where T : class
            {
                if (string.IsNullOrEmpty(jsonStr))
                    return null;
                try
                {
                    var instance = JsonConvert.DeserializeObject<T>(jsonStr);
    
                    return instance;
                }
                catch
                {
                    return null;
                }
    
            }
        }
    
        /// <summary>
        /// 自定义数值类型序列化转换器(默认保留3位)
        /// </summary>
        public class JsonCustomDoubleConvert : CustomCreationConverter<double>
        {
            /// <summary>
            /// 序列化后保留小数位数
            /// </summary>
            public virtual int Digits { get;private set; }
    
            /// <summary>
            /// .ctor
            /// </summary>
            public JsonCustomDoubleConvert()
            {
                this.Digits = 3;
            }
    
            /// <summary>
            /// .ctor
            /// </summary>
            /// <param name="digits">序列化后保留小数位数</param>
            public JsonCustomDoubleConvert(int digits)
            {
                this.Digits = digits;
            }
    
            /// <summary>
            /// 重载是否可写
            /// </summary>
            public override bool CanWrite { get { return true; } }
    
            /// <summary>
            /// 重载创建方法
            /// </summary>
            /// <param name="objectType"></param>
            /// <returns></returns>
            public override double Create(Type objectType)
            {
                return 0.0;
            }
    
            /// <summary>
            /// 重载序列化方法
            /// </summary>
            /// <param name="writer"></param>
            /// <param name="value"></param>
            /// <param name="serializer"></param>
            public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
            {
                if (value == null)
                {
                    writer.WriteNull();
                }
                else
                {
                    var formatter = ((double)value).ToString("N" + Digits.ToString());
                    writer.WriteValue(formatter);
                }
    
            }
        }
    
        /// <summary>
        /// 自定义数值类型序列化转换器(无小数位)
        /// </summary>
        public class JsonCustomDoubleWith0DigitsConvert : JsonCustomDoubleConvert
        {
            public override int Digits
            {
                get { return 0; }
            }
        }
    
        /// <summary>
        /// 自定义数值类型序列化转换器(保留1位)
        /// </summary>
        public class JsonCustomDoubleWith1DigitsConvert : JsonCustomDoubleConvert
        {
            public override int Digits
            {
                get { return 1; }
            }
        }
    
        /// <summary>
        /// 自定义数值类型序列化转换器(保留2位)
        /// </summary>
        public class JsonCustomDoubleWith2DigitsConvert : JsonCustomDoubleConvert
        {
            public override int Digits
            {
                get { return 2; }
            }
        }
    
        /// <summary>
        /// 自定义数值类型序列化转换器(保留3位)
        /// </summary>
        public class JsonCustomDoubleWith3DigitsConvert : JsonCustomDoubleConvert
        {
            public override int Digits
            {
                get { return 3; }
            }
        }
    
        /// <summary>
        /// 自定义数值类型序列化转换器(保留4位)
        /// </summary>
        public class JsonCustomDoubleWith4DigitsConvert : JsonCustomDoubleConvert
        {
            public override int Digits
            {
                get { return 4; }
            }
        }
    
        /// <summary>
        /// 自定义数值类型序列化转换器(保留5位)
        /// </summary>
        public class JsonCustomDoubleWith5DigitsConvert : JsonCustomDoubleConvert
        {
            public override int Digits
            {
                get { return 5; }
            }
        }
        class Order
        {
            public int Id { get; set; }
    
            public static int OrderId = GetOrderId();
    
            public IEnumerable<int> Missions = null;
    
            static int GetOrderId()
            {
                return new Random().Next(1, 10000);
            }
    
            [JsonConverter(typeof(JsonCustomDoubleWith0DigitsConvert))]
            public double OrderAmount { get; set; }
        }
  • 相关阅读:
    Java中的4种代码块
    Java enum(枚举)的用法详解(转)
    Java 可变参数列表
    SQL Server 查询处理中的各个阶段(SQL执行顺序)
    SQL Server 数据查询 整理
    MYSQL常用命令
    SQL的主键和外键约束(转)
    Servlet工作原理(转)
    servlet、genericservlet、httpservlet之间的区别(转)
    关于MyEcplise中常见的问题和解决方案
  • 原文地址:https://www.cnblogs.com/zhshlimi/p/6422613.html
Copyright © 2011-2022 走看看