Search code examples
c#serializationdatacontractserializerdatacontractjsonserializer

DataContractJsonSerializer to skip nodes with null values


I am using DataContractJsonSerializer to serialize my custom object to JSON. But i want to skip the data members whose values are null. If DataMember is null that node should not come in JSON string.

How can I achieve this? Give me a simple code snippet to work with.


Solution

  • You can use the EmitDefaultValue = false property in the [DataMember] attribute. For members marked with that attribute, their values will not be output.

    [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()));
        }
    }