分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 网页技术

使用JSON.NET实现对象属性的自定义化格式

发布时间:2023-09-06 02:34责任编辑:董明明关键词:.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; }}
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();}
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
}
可以得到目标结果:

第二种方法:
给目标属性添加自定义格式化特性:
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();}
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
}
可以得到目标结果:
以上都是针对日期类型的格式化处理,至于其他类型的格式化应该时可以参考以上的。


使用JSON.NET实现对象属性的自定义化格式

原文地址:https://www.cnblogs.com/Med1tator/p/95f5a4c3066232a5f44084939c51f966.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved