13

Sto usando DataContractJsonSerializer per serializzare il mio oggetto personalizzato su JSON. Ma voglio saltare i membri dati i cui valori sono null. Se DataMember è null, quel nodo non dovrebbe entrare nella stringa JSON.DataContractJsonSerializer per saltare nodi con valori nulli

Come posso ottenere questo risultato? Dammi un semplice code snippet con cui lavorare.

risposta

31

È possibile utilizzare la proprietà EmitDefaultValue = false nell'attributo [DataMember]. Per i membri contrassegnati con quell'attributo, i loro valori non verranno emessi.

[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

Grazie mille @carlosfigueira – Kishor