使属性可反序列化但不可序列化

时间:2014-04-04 11:18:44

标签: asp.net .net json serialization asp.net-web-api

我有一个属性的类,我想在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,但我得到了相同的结果。

1 个答案:

答案 0 :(得分:2)

根据序列化程序的不同,可能只需添加:

public bool ShouldSerializePassword() { return false; }

这是一个众所周知的模式,适用于许多序列化程序,但不是全部。

另一种常见模式是:

public bool PasswordSpecified { get { return false; } set {} }

但是这很麻烦,因为你需要告诉序列化程序忽略它 - 例如使用[XmlIgnore, ScriptIgnore, IgnoreDataMember]等。

无论哪种方式,您可能想要添加:

[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]

(防止出现在太多地方的财产或方法)

最后一个选项很简单:序列化时,不要给.Password一个值; p