使用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 Person2
{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 Person4
{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();
}40
40
1
class Person2
{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 : IsoDateTimeConverter11
{12
public DateTimeConverter()13
:base()14
{15
//Default datetime format16
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 Person30
{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
} 可以得到目标结果:

以上都是针对日期类型的格式化处理,至于其他类型的格式化应该时可以参考以上的。

浙公网安备 33010602011771号