代码之家  ›  专栏  ›  技术社区  ›  Kuczi

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

  •  1
  • Kuczi  · 技术社区  · 8 年前

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

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

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

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

    2 回复  |  直到 8 年前
        1
  •  1
  •   Alexander Petrov    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

    SomeClass sc = ...;
    sc.Var2 = null;
    

    因此,它将被省略。

        2
  •  0
  •   BWA Rakesh BG    8 年前

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

    与属性同名的布尔值,然后为方法添加前缀 名称应序列化。该方法的结果决定是否 属性将被序列化,如果返回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;
        }
    }