C#如何以不同方式序列化对象

时间:2017-06-28 10:15:05

标签: c# serialization datacontractserializer

假设我有一个我希望能够序列化的类,如下所示:

public class SomeClass
{
    [DataMember]
    public object Var1 {get; set; }

    [DataMember]
    public object Var2 {get; set; }

    [DataMember]
    public object Var3 {get; set; }
}

有时我希望将其与Var3序列化,所以基本上是这样的:

public class SomeClass
{
    [DataMember]
    public object Var1 {get; set; }

    [DataMember]
    public object Var2 {get; set; }

    public object Var3 {get; set; }
}

在其他情况下我希望省略Var2。

是否有任何方法可以使用属性来装饰类,这些属性可以让我选择以何种方式将此类序列化?

2 个答案:

答案 0 :(得分:1)

<meta charset="UTF-8">参数添加到属性。

EmitDefaultValue

如果您想省略public class SomeClass { [DataMember] public string Var1 { get; set; } [DataMember(EmitDefaultValue = false)] public object Var2 { get; set; } [DataMember(EmitDefaultValue = false)] public object Var3 { get; set; } } ,请将其设为Var2

null

结果将被省略。

答案 1 :(得分:0)

如果您使用JSON.NET进行序列化,则可以使用Conditional Property Serialization

  

要有条件地序列化属性,请添加返回的方法   boolean与属性同名,然后为方法添加前缀   使用ShouldSerialize命名。该方法的结果确定是否   该属性是序列化的。如果方法返回true则为   属性将被序列化,如果它返回false然后属性   将被跳过。

实施例

public class SomeClass
{
    [DataMember]
    public object Var1 {get; set; }

    [DataMember]
    public object Var2 {get; set; }

    [DataMember]
    public object Var3 {get; set; }

    public bool SerializeVar2 {get; set; }

    public bool ShouldSerializeVar2
    {
        return SerializeVar2;
    }
}