web-dev-qa-db-ja.com

null値のノードをスキップするDataContractJsonSerializer

DataContractJsonSerializerを使用してカスタムオブジェクトをJSONにシリアル化します。しかし、値がnullであるデータメンバーをスキップしたいと思います。 DataMembernullの場合、そのノードはJSON文字列で入力しないでください。

どうすればこれを達成できますか?簡単なcode snippetで作業します。

20
Kishor

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