Подтвердить что ты не робот

DataContractJsonSerializer пропускает узлы с нулевыми значениями

Я использую DataContractJsonSerializer для сериализации моего пользовательского объекта в JSON. Но я хочу пропустить элементы данных, значения которых null. Если DataMember - null, то node не должен входить в строку JSON.

Как я могу это достичь? Дайте мне простой code snippet для работы.

4b9b3361

Ответ 1

Вы можете использовать свойство 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()));
    }
}