使用@Json.Encode时隐藏模型中的字段

时间:2014-01-21 16:14:38

标签: c# asp.net asp.net-mvc json asp.net-mvc-4

在我的ASP.NET MVC4应用程序中,我的模型定义如下:

public class Employee : BaseObject
{
    [JsonIgnore]
    public string FirstName { get; set; }
    [JsonIgnore]
    public string LastName { get; set; }
    [JsonIgnore]
    public string Manager { get; set; }

    public string Login { get; set; }
    ...
}

当我使用ApiController返回此对象时,我得到正确的对象没有具有JsonIgnore属性的字段,但是当我尝试使用下面的代码在cshtml文件中添加相同的对象时,我得到所有字段。

<script type="text/javascript">
    window.parameters = @Html.Raw(@Json.Encode(Model));
</script>

看起来@Json.Encode忽略了这些属性 如何解决这个问题?

2 个答案:

答案 0 :(得分:16)

您使用的System.Web.Helpers.Json类依赖于.NET的JavaScriptSerializer类。

您在模型上使用的JsonIgnore属性特定于默认情况下用于ASP.NET Web API的Newtonsoft Json.NET库。这就是为什么它不起作用。

您可以在Razor视图中使用相同的JSON序列化程序,以便与Web API更加一致:

<script type="text/javascript">
    window.parameters = @Html.Raw(Newtonsoft.Json.JsonConvert.SerializeObject(Model));
</script>

答案 1 :(得分:7)

您也可以在模型上使用[ScriptIgnore],即:

public class Employee : BaseObject
{
    [ScriptIgnore]
    public string FirstName { get; set; }
    [ScriptIgnore]
    public string LastName { get; set; }
    [ScriptIgnore]
    public string Manager { get; set; }

    public string Login { get; set; }
    ...
}

按照原样呈现:

<script type="text/javascript">
    window.parameters = @Html.Raw(@Json.Encode(Model));
</script>