序列化对象 自定义对象 使用 JsonConvert.SerializeObject
方法,实例代码:
Copy 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
using System ;
using Newtonsoft.Json ;
namespace ConsoleApp3
{
class Person
{
[JsonProperty("name")]
public string Name { get ; set ; }
[JsonProperty("age")]
public int? Age { get ; set ; }
}
class Program
{
static void Main(string [] args)
{
Person p = new Person();
p.Name = "张三" ;
p.Age = 20 ;
Console.WriteLine(JsonConvert.SerializeObject(p, Formatting.None, new JsonSerializerSettings));
}
}
}
输出结果如下:
如果 Age
没有赋值,默认为 null
, 会被序列化成 null
Copy 1
2
3
Person p = new Person();
p.Name = "张三" ;
Console.WriteLine(JsonConvert.SerializeObject(p));
Copy 1
{"name":"张三","age":null}
可以设置不要序列化值为 null
的成员,有两种方式,第一种:
Copy 1
2
3
4
5
6
Person p = new Person();
p.Name = "张三" ;
Console.WriteLine(JsonConvert.SerializeObject(
p,
Formatting.None,
new JsonSerializerSettings{ NullValueHandling = NullValueHandling.Ignore }));
或者在 JsonProperty
里声明:
Copy 1
2
3
4
5
6
7
8
class Person
{
[JsonProperty("name", NullValueHandling = NullValueHandling.Ignore)]
public string Name { get ; set ; }
[JsonProperty("age", NullValueHandling=NullValueHandling.Ignore)]
public int? Age { get ; set ; }
}
输出结果如下:
不要序列化成员,但是要反序列化 通过实现 ShouldSerializePropertyName
实现,如:
Copy 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Person
{
[JsonProperty("name", NullValueHandling = NullValueHandling.Ignore)]
public string Name { get ; set ; }
[JsonProperty("age", NullValueHandling=NullValueHandling.Ignore)]
public int? Age { get ; set ; }
[JsonProperty("available", NullValueHandling = NullValueHandling.Ignore)]
public bool Available { get ; set ; } = false ;
public bool ShouldSerializeAvailable()
{
return false ;
}
}