在c#代码中隐藏属性
我有一个商务舱,比如User.cs:在c#代码中隐藏属性,c#,asp.net,json,C#,Asp.net,Json,我有一个商务舱,比如User.cs: [Serializable] public class User { public int UserID { get; set; } public string UserName { get; set; } public int Password { get; set; } } 在我的服务器端代码中,我正在编写以下代码以JSON格式序列化用户对象: User user=Some
[Serializable]
public class User
{
public int UserID { get; set; }
public string UserName { get; set; }
public int Password { get; set; }
}
在我的服务器端代码中,我正在编写以下代码以JSON格式序列化用户对象:
User user=SomeUserBLClass.GetUser(1);
Response.Write(new JavaScriptSerializer().Serialize(user));
我的要求是隐藏发送到客户端的密码,即我不希望密码字段出现在json数据中。你能帮我解决这个问题吗?使用匿名类型并省略密码怎么样
Response.Write(new JavaScriptSerializer().Serialize(new {UserId = user.UserId, UserName = user.UserName});
您可以将
[ScriptIgnore]
属性添加到密码
[Serializable]
public class User
{
public int UserID { get; set; }
public string UserName { get; set; }
[ScriptIgnore]
public int Password {get; set;}
}
从用户对象中完全排除密码字段,并且只允许通过ValidateUser或ChangePassword等方法在SomeUserBLClass中内部使用后端版本 您不希望任何版本的密码以任何形式暴露在前一层-显示层总是有可能抛出抖动并以某种形式将数据转储到客户端
从等式中删除它,只允许过渡访问它,它就不再是一个问题。不会
[ScriptIgnore]
达到同样的效果,但可以使用自动属性吗?@David:当然会,我以前没有遇到过[ScriptIgnore]
,谢谢。我会改变答案。我喜欢这个解决方案,因为它迫使你思考你真正需要传递给客户的东西。否则你很快就会陷入这样一种情况:你隐藏了密码,因为你关心这个问题,但你仍然序列化了大量的字段,而这些字段并不是真正需要的。密码真的是int吗?o_ONo:)只是一个示例代码。