Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在c#代码中隐藏属性_C#_Asp.net_Json - Fatal编程技术网

在c#代码中隐藏属性

在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

我有一个商务舱,比如User.cs:

  [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:)只是一个示例代码。