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

c#DataContractJsonSerializer,运行时不包括字段

  •  0
  • sean  · 技术社区  · 16 年前

    将对象序列化为JSON字符串时,是否可以在运行时排除指定字段?i、 e.序列化对象时,仅序列化列表中指定的字段。

    2 回复  |  直到 16 年前
        1
  •  5
  •   Jose Basilio    16 年前

    任何没有 [DataMember] 属性将不会序列化

    [DataContract]
    public class MyClass
    {
      [DataMember]
      public string SerializeMe {get;set;}
    
      public string DontSerializeMe {get;set;}
    
      [DataMember]
      public string SerializeMeToo {get;set;}
    }
    
        2
  •  2
  •   sean    16 年前

    DataContractJsonSerializer是opt-in,因此仅包含标记为DataMemberAttribute的字段。

    我想在运行时更改它(如根据特定条件以编程方式排除某些字段),以排除空字段,但这是默认行为。所以我想这已经不相关了。

    public DateTime DateOfBirth;
    
    [DataMember] public bool Confidential;
    
    [DataMember (Name="DateOfBirth", EmitDefaultValue=false)]
    DateTime? _tempDateOfBirth;
    
    [OnSerializing]
    void PrepareForSerialization (StreamingContext sc)
    {
      if (Confidential)
        _tempDateOfBirth = DateOfBirth;
      else
        _tempDateOfBirth = null;
    }