MVC3-在序列化为JSON之前修改对象
本文关键字:修改 对象 JSON 序列化 MVC3- | 更新日期: 2023-09-27 18:22:46
我目前正在为我的应用程序开发一个小型REST API。它运行良好。不过有一个问题。返回给用户的结果包含太多数据。我的控制器看起来像这样:
public JsonResult Profile(string name)
{
var encodedName = HttpUtility.HtmlEncode(name);
var n = encodedName.Replace('+', ' ');
var profile = profileSource.GetProfileForName(n);
if (profile == null)
{
HttpContext.Response.StatusCode = 404;
}
// XXXXX: how to remove certain fields from the profile?
return Json(profile, JsonRequestBehavior.AllowGet);
}
你知道处理这个问题最干净的方法是什么吗?有没有什么方法可以注释概要文件模型,这样某些字段就不会被序列化?我想我也可以为这个特定的案例构建一个自定义模型,或者以某种方式破解JsonResult。不过,这两种方式中的任何一种都会增加一些额外的开销。
您可以使用LINQ select方法投影到匿名类型中。
您可能应该使用Profile属性的子集创建一个自定义对象。然后将原始对象转换为新的类似DTO的对象。(提示:尝试AutoMapper)。序列化并返回。
return Json(new{profile.FirstName, profile.LastName, profile.OtherFields}, JsonRequestBehavior.AllowGet);
我最终使用了继承。基本上,我有一个"共享"模型(基类)和一个派生该模型并向其添加一些额外字段的模型。在源代码处,我只需为我的REST API构造一个共享实例,而应用程序的其他部分则使用派生的实例。很简单,似乎效果很好。