c#DataContractJsonSerializer在运行时排除字段

时间:2009-06-05 06:35:44

标签: c# json serialization

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

2 个答案:

答案 0 :(得分:5)

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

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

  public string DontSerializeMe {get;set;}

  [DataMember]
  public string SerializeMeToo {get;set;}
}

答案 1 :(得分:2)

DataContractJsonSerializer是选择加入的,因此只包含标有DataMemberAttribute的字段。

我想在运行时更改它(如在编程上排除某些字段,具体取决于某些条件)以排除null的字段,但这是默认行为。所以我想它已经不再适用了。

更新,也可以使用以下内容:

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;
}