asp.net - 使属性可反序列化但不可序列化

标签 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] 我可以使用登录,但在 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/

相关文章:

asp.net - 快速上传图像到服务器使用图像作为参数

asp.net - .NET进程和AppDomains在什么情况下会共享内存中已加载的程序集?

c# - 为什么PowerShell不能 'understand'响应文件的说明?

c# - 是否可以将传递给.NET方法的变量的类型限制为不是派生类?

c# - Json.NET 中的替代字段类型

json - 读取具有一对多关系的 JPA 模型时生成不完整的 JSON 错误

asp.net - 在 c# asp.net 中执行查询

c# - ASP.NET 如何处理包含用户控件的页面中的用户控件事件?

c# - Activator.CreateInstance 在这种情况下的优势

java - 使用 GWTP 创建表