zoukankan      html  css  js  c++  java
  • 使用JSON.NET实现对象属性的格式化的自定义

    在使用JSON.NET序列化对象时,希望能够对一些属性字段的格式自定义处理,经常遇到的便是日期格式的自定义,下面就给出例子。
    如有一个Person类,实例化Person对象时,希望BirthDate的格式结果为“yyyy/MM//dd”或“yyyy-MM-dd”:
    class Person
    {
        public string Name { get; set; }
        public int Age { get; set; }
        public DateTime BirthDate { get; set; }
    }
    第一种方法:
        给JsonConvert.SerializeObject的方法传入自定义的格式化参数:
    static void Main(string[] args)
    {
        var me = new Person
        {
            Name = "Medit Ding",
            Age = 27,
            BirthDate = DateTime.Parse("1992-11-13")
        };
    
        var json1 = JsonConvert.SerializeObject(me);
        var json2 = JsonConvert.SerializeObject(me, new IsoDateTimeConverter { DateTimeFormat = "yyyy/MM/dd" });
    
        Console.WriteLine($"json1:	{json1}
    json2:	{json2}");
        Console.ReadKey();
    }
    可以得到目标结果:

    第二种方法:
        给目标属性添加自定义格式化特性:
    class Person
    {
        public string Name { get; set; }
        public int Age { get; set; }
    
        [JsonConverter(typeof(DateTimeConverter),"yyyy/MM/dd")]
        public DateTime BirthDate { get; set; }
    }
    
    class DateTimeConverter : IsoDateTimeConverter
    {
        public DateTimeConverter()
            :base()
        {
            //Default datetime format
            DateTimeFormat = "yyyy-MM-dd HH:mm:ss";
        }
    
        public DateTimeConverter(string format)
            :base()
        {
            DateTimeFormat = format;
        }
    }
    
    ....
    static void Main(string[] args)
    {
        var me = new Person
        {
            Name = "Medit Ding",
            Age = 27,
            BirthDate = DateTime.Parse("1992-11-13")
        };
        
        var json = JsonConvert.SerializeObject(me);
    
        Console.WriteLine($"json:	{json}");
        Console.ReadKey();
    }
        可以得到目标结果:
    以上都是针对日期类型的格式化处理,至于其他类型的格式化应该时可以参考以上的。


  • 相关阅读:
    结构和联合
    字符串、字符和字节
    数组
    函数
    指针
    操作符和表达式
    语句
    数据
    TinyXML2 使用
    是否忘记了向源中添加“#include "StdAfx.h"”?
  • 原文地址:https://www.cnblogs.com/Med1tator/p/95f5a4c3066232a5f44084939c51f966.html
Copyright © 2011-2022 走看看