0

我尝试通过将对象转换为某个接口来过滤掉不必要的属性。接下来,我将其序列化为 JSON 对象,如下面的代码。

@{ 
    var program = ViewBag.Program as IProgram;
}

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

但是,它仍然序列化原始对象中的所有属性,而不是仅序列化接口中定义的属性。

如何仅序列化当前对象类型中的属性,而不是序列化原始对象中的所有属性?

4

1 回答 1

0

当然使用视图模型:

@{ 
    var program = new 
    { 
        Foo = ViewBag.Program.Property1,
        Bar = ViewBag.Program.Property2
    };
}

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

顺便说一句,这应该在您的控制器操作中完成,而不是使您的视图混乱。因此,与其在 ViewBag.Program 中传递这个对象,不如直接传递一个仅包含您需要序列化的属性的视图模型。

public ActionResult SomeAction()
{
    Program program = ...
    ViewBag.Program = new
    {
        Foo = ViewBag.Program.Property1,
        Bar = ViewBag.Program.Property2
    };
    return View();
}

哦,使用真实的视图模型并将 ViewBag 剪掉。

于 2012-10-16T08:44:27.920 回答