Newtonsoft.Json 自定义序列化格式转化器

摘要:
publicstaticclassJsonHelper{staticJsonHelper(){Newtonsoft.Json.JsonSerializerSettingssetting=newNewtonsoft.Json.JsonSerializerSettings();JsonConvert.DefaultSettings=newFunc(()=
 public static  classJsonHelper
    {
        staticJsonHelper()
        {
            Newtonsoft.Json.JsonSerializerSettings setting = newNewtonsoft.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));
                }

                returnsetting;
            });
        }

        public static String ToJsonStr<T>(this T obj) where T : class{
            if (obj == null)
                return string.Empty;
            returnJsonConvert.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);

                returninstance;
            }
            catch{
                return null;
            }

        }
    }

    /// <summary>
    ///自定义数值类型序列化转换器(默认保留3位)
    /// </summary>
    public class JsonCustomDoubleConvert : CustomCreationConverter<double>{
        /// <summary>
        ///序列化后保留小数位数
        /// </summary>
        public virtual int Digits { get;private set; }

        /// <summary>
        ///.ctor
        /// </summary>
        publicJsonCustomDoubleConvert()
        {
            this.Digits = 3;
        }

        /// <summary>
        ///.ctor
        /// </summary>
        /// <param name="digits">序列化后保留小数位数</param>
        public JsonCustomDoubleConvert(intdigits)
        {
            this.Digits =digits;
        }

        /// <summary>
        ///重载是否可写
        /// </summary>
        public override bool CanWrite { get { return true; } }

        /// <summary>
        ///重载创建方法
        /// </summary>
        /// <param name="objectType"></param>
        /// <returns></returns>
        public override doubleCreate(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, objectvalue, JsonSerializer serializer)
        {
            if (value == null)
            {
                writer.WriteNull();
            }
            else{
                var formatter = ((double)value).ToString("N" +Digits.ToString());
                writer.WriteValue(formatter);
            }

        }
    }

    /// <summary>
    ///自定义数值类型序列化转换器(无小数位)
    /// </summary>
    public classJsonCustomDoubleWith0DigitsConvert : JsonCustomDoubleConvert
    {
        public override intDigits
        {
            get { return 0; }
        }
    }

    /// <summary>
    ///自定义数值类型序列化转换器(保留1位)
    /// </summary>
    public classJsonCustomDoubleWith1DigitsConvert : JsonCustomDoubleConvert
    {
        public override intDigits
        {
            get { return 1; }
        }
    }

    /// <summary>
    ///自定义数值类型序列化转换器(保留2位)
    /// </summary>
    public classJsonCustomDoubleWith2DigitsConvert : JsonCustomDoubleConvert
    {
        public override intDigits
        {
            get { return 2; }
        }
    }

    /// <summary>
    ///自定义数值类型序列化转换器(保留3位)
    /// </summary>
    public classJsonCustomDoubleWith3DigitsConvert : JsonCustomDoubleConvert
    {
        public override intDigits
        {
            get { return 3; }
        }
    }

    /// <summary>
    ///自定义数值类型序列化转换器(保留4位)
    /// </summary>
    public classJsonCustomDoubleWith4DigitsConvert : JsonCustomDoubleConvert
    {
        public override intDigits
        {
            get { return 4; }
        }
    }

    /// <summary>
    ///自定义数值类型序列化转换器(保留5位)
    /// </summary>
    public classJsonCustomDoubleWith5DigitsConvert : JsonCustomDoubleConvert
    {
        public override intDigits
        {
            get { return 5; }
        }
    }
    classOrder
    {
        public int Id { get; set; }

        public static int OrderId =GetOrderId();

        public IEnumerable<int> Missions = null;

        static intGetOrderId()
        {
            return new Random().Next(1, 10000);
        }

        [JsonConverter(typeof(JsonCustomDoubleWith0DigitsConvert))]
        public double OrderAmount { get; set; }
    }

免责声明:文章转载自《Newtonsoft.Json 自定义序列化格式转化器》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇windows上vmware 虚拟机,局域网其他主机访问第一步(搭建阿里云主机服务器): 如何在远程Linux服务器上搭建Nginx下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

WPF通过深拷贝实现保存与取消

用old保存就设置,用new保存新设置确认逻辑 public void SaveCurrent() { //创建一个新对象(深拷贝) oldConfig = CopyEx.DeepCopyByBin(config); } 取消逻辑 public voi...

Java 中使用Jackson反序列化

Build.gradle: compile group: 'org.codehaus.jackson', name: 'jackson-mapper-lgpl', version: '1.9.13' compile group: 'org.codehaus.jackson', name: 'jackson-core-lgpl', version: '...

php的serialize序列化和json性能测试

最近需要对大数组做存储,需要在serialize序列化和json之间做了选择。因此需要做了性能测试。 在php5.2之前对数组存储的时候,大都使用serialize系列化。php5.2之后,开始内置了 JSON 的支持。 在网上看到有些资料说:json_encode和json_decode比内置的serialize和unserialize函数要高效。耳闻不...

Fastjson介绍

简单介绍 Fastjson是一个Java语言编写的高性能功能完好的JSON库。 高性能 fastjson採用独创的算法,将parse的速度提升到极致,超过全部json库,包含以前号称最快的jackson。而且还超越了google的二进制协议protocol buf。 支持标准 Fastjson全然支持http://json.org的标准,也是官...

C# 序列化与反序列化Serialization之Json Xml Binary Soap JavaScript序列化

所谓的序列化其实就是把一个内存中的对象信息转化成一个可以持久化保存的形式,方便保存数据库和文件或着用于传输, 序列化的主要作用是不同平台之间进行通信与信息的传递保存等,常用的有序列化有Json Xml Binary Soap JavaScript序列化等,当然我们也可以使用第三方的序列化类库,第三方的序列化类库可以参照网上的,这里不再赘述, 本文主要介绍J...

redis 序列化存入对象

redis 序列化存入对象 //序列化 public static byte[] serialize(Object obj){ ObjectOutputStream obi=null; ByteArrayOutputStream bai=null; try{ ba...