DataContractJsonSerializer跳过具有空值的节点

时间:2012-11-22 05:55:16

标签: c# serialization datacontractserializer datacontractjsonserializer

我正在使用DataContractJsonSerializer将自定义对象序列化为JSON。但我想跳过值为null的数据成员。如果DataMembernull,则该节点不应包含在JSON字符串中。

我怎样才能做到这一点?给我一个简单的code snippet来处理。

1 个答案:

答案 0 :(得分:39)

您可以使用EmitDefaultValue = false属性中的[DataMember]属性。对于标有该属性的成员,不会输出它们的值。

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