使用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; }
}
6
6
 
1
class Person
2
{
3
    public string Name { get; set; }
4
    public int Age { get; set; }
5
    public DateTime BirthDate { get; set; }
6
}
第一种方法:
    给 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:\t{json1}\r\njson2:\t{json2}");
    Console.ReadKey();
}
15
15
 
1
static void Main(string[] args)
2
{
3
    var me = new Person
4
    {
5
        Name = "Medit Ding",
6
        Age = 27,
7
        BirthDate = DateTime.Parse("1992-11-13")
8
    };
9
 
          
10
    var json1 = JsonConvert.SerializeObject(me);
11
    var json2 = JsonConvert.SerializeObject(me, new IsoDateTimeConverter { DateTimeFormat = "yyyy/MM/dd" });
12
 
          
13
    Console.WriteLine($"json1:\t{json1}\r\njson2:\t{json2}");
14
    Console.ReadKey();
15
}
可以得到目标结果:
1086526-20190309152759223-1235882448.png

第二种方法:
    给目标属性添加自定义格式化特性:
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:\t{json}");
    Console.ReadKey();
}
40
40
 
1
class Person
2
{
3
    public string Name { get; set; }
4
    public int Age { get; set; }
5
 
          
6
    [JsonConverter(typeof(DateTimeConverter),"yyyy/MM/dd")]
7
    public DateTime BirthDate { get; set; }
8
}
9
 
          
10
class DateTimeConverter : IsoDateTimeConverter
11
{
12
    public DateTimeConverter()
13
        :base()
14
    {
15
        //Default datetime format
16
        DateTimeFormat = "yyyy-MM-dd HH:mm:ss";
17
    }
18
 
          
19
    public DateTimeConverter(string format)
20
        :base()
21
    {
22
        DateTimeFormat = format;
23
    }
24
}
25
 
          
26
....
27
static void Main(string[] args)
28
{
29
    var me = new Person
30
    {
31
        Name = "Medit Ding",
32
        Age = 27,
33
        BirthDate = DateTime.Parse("1992-11-13")
34
    };
35
    
36
    var json = JsonConvert.SerializeObject(me);
37
 
          
38
    Console.WriteLine($"json:\t{json}");
39
    Console.ReadKey();
40
}
    可以得到目标结果:
1086526-20190309152759850-1055848737.png
以上都是针对日期类型的格式化处理,至于其他类型的格式化应该时可以参考以上的。


转载于:https://www.cnblogs.com/Med1tator/p/95f5a4c3066232a5f44084939c51f966.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值