13

我正在使用DataContractJsonSerializer將我的自定義對象序列化爲JSON。但我想跳過值爲null的數據成員。如果DataMembernull該節點不應以JSON字符串形式出現。DataContractJsonSerializer跳過空值的節點

我該如何做到這一點?給我一個簡單的code snippet工作。

回答

31

您可以使用[DataMember]屬性中的EmitDefaultValue = false屬性。對於使用該屬性標記的成員,其值不會輸出。

[DataContract] 
public class MyType 
{ 
    [DataMember(EmitDefaultValue = false)] 
    public string Prop1 { get; set; } 
    [DataMember(EmitDefaultValue = false)] 
    public string Prop2 { get; set; } 
    [DataMember(EmitDefaultValue = false)] 
    public string Prop3 { get; set; } 
} 
public class Test 
{ 
    public static void Main() 
    { 
     var dcjs = new DataContractJsonSerializer(typeof(MyType)); 
     var ms = new MemoryStream(); 
     var data = new MyType { Prop2 = "Hello" }; 
     dcjs.WriteObject(ms, data); 

     // This will write {"Prop2":"Hello"} 
     Console.WriteLine(Encoding.UTF8.GetString(ms.ToArray())); 
    } 
} 
+0

非常感謝@carlosfigueira – Kishor