【问题标题】:c# DataContractJsonSerializer excluding fields at runtimec# DataContractJsonSerializer 在运行时排除字段
【发布时间】:2009-06-05 06:35:44
【问题描述】:

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

【问题讨论】:

    标签: c# json serialization


    【解决方案1】:

    任何没有[DataMember] 属性的属性都不会被序列化

    [DataContract]
    public class MyClass
    {
      [DataMember]
      public string SerializeMe {get;set;}
    
      public string DontSerializeMe {get;set;}
    
      [DataMember]
      public string SerializeMeToo {get;set;}
    }
    

    【讨论】:

    • 我可以在运行时以编程方式决定不序列化字段“SerializeMe”吗?
    【解决方案2】:

    DataContractJsonSerializer 是可选的,因此仅包含标有 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;
    }
    

    【讨论】:

      猜你喜欢
      • 2011-06-07
      • 1970-01-01
      • 2013-01-12
      • 2012-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-24
      • 1970-01-01
      相关资源
      最近更新 更多