将对象序列化为JSON字符串时,是否可以在运行时排除指定的字段?即序列化对象时,只序列化列表中指定的字段。
答案 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;
}