我尝试通过将对象强制转换为某个界面来过滤掉不必要的属性。接下来,我将其序列化为JSON对象,如下面的代码。
@{
var program = ViewBag.Program as IProgram;
}
<script type="text/javascript">
window.program = @Html.Raw(Json.Encode(program));
</script>
但是,它仍然序列化原始对象中的所有属性,而不是仅序列化在接口中定义的属性。
如何仅序列化当前对象类型的属性,而不是序列化原始对象中的所有属性?
答案 0 :(得分: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剪掉。