我有一个类,我想在 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] 我可以使用登录,但在 get我看到密码了。
我也尝试 [NotSerialized] 使用支持字段,如建议 here , 但我得到了相同的结果。
最佳答案
根据序列化程序,您可能能够简单地添加:
public bool ShouldSerializePassword() { return false; }
这是一个众所周知的模式,适用于许多序列化程序,但不是全部。
另一个常见的模式是:
public bool PasswordSpecified { get { return false; } set {} }
但这比较棘手,因为您需要还告诉序列化程序忽略它 - 例如使用 [XmlIgnore, ScriptIgnore, IgnoreDataMember]
等
无论哪种方式,您可能都想添加:
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
(防止属性或方法出现太多地方)
最后一个选项很简单:序列化时,不要给 .Password
一个值;p
关于asp.net - 使属性可反序列化但不可序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22861367/