我有一个属性的类,我想在json反序列化中使用但我想在json序列化中省略。
实施例: 我有一个班级用户:
public class UserDTO
{
public string UserName { get; set; }
public string Password { get; set; }
}
我在ASP.NET Web API中使用它。
我使用此类进行登录并获取所有用户。 显然,在get中我只想看到用户名,但在登录时我需要用户名和密码。
我尝试使用属性 [IgnoreDataMember] :
public class UserDTO
{
public string UserName { get; set; }
[IgnoreDataMember]
public string Password { get; set; }
}
或使用DataContract
装饰我的类[DataContract]
public class UserDTO
{
[DataMember]
public string UserName { get; set; }
public string Password { get; set; }
}
但是在这种模式下我无法登录,确实如果我不使用属性 [DataContract] 或 [IgnoreDataMember] 我可以使用登录,但是在获取我看密码了。
我也尝试[NotSerialized]使用支持字段,如建议here,但我得到了相同的结果。
答案 0 :(得分:2)
根据序列化程序的不同,可能只需添加:
public bool ShouldSerializePassword() { return false; }
这是一个众所周知的模式,适用于许多序列化程序,但不是全部。
另一种常见模式是:
public bool PasswordSpecified { get { return false; } set {} }
但是这很麻烦,因为你需要也告诉序列化程序忽略它 - 例如使用[XmlIgnore, ScriptIgnore, IgnoreDataMember]
等。
无论哪种方式,您可能想要添加:
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
(防止出现在太多地方的财产或方法)
最后一个选项很简单:序列化时,不要给.Password
一个值; p