如果我在asp.net mvc中呈现常规视图,那么我在页面中显示的唯一域对象属性是我专门写出来的.例如:
<%= Customer.FirstName %>
但是,如果我为json序列化一个域对象,它将包含每个属性.例:
public JsonResult Customer (int? id) { Customer customer = _serviceLayer.GetCustomer (id.Value); return Json (customer); }
由于我不希望每个Customer属性都暴露出在这种情况下过滤json的输出属性的最佳方法是什么?你可以使用像UpdateModel()这样的包含/排除列表吗?使用代理类,如公共类JsonCustomer?你会推荐什么?
我使用匿名类型:
var customer = from c in serviceLayer.GetCustomers() where c.Id == id.Value select new { FirstName = c.FirstName };
这不仅仅是一个好主意.相反,如果您的对象图包含循环引用,它可以防止在调用Json()时获得的异常.
您可以使用[ScriptIgnore]属性(在System.Web.Extensions中).有关示例,请参见http://www.creave.dk/post/2009/10/07/Excluding-properties-from-being-serialized-in-ASPNET-MVC-JsonResult.aspx.