序列化对象 自定义对象 使用 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 ;
     }
 }