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。不过,这两种方式中的任何一种都会增加一些额外的开销。

MVC3-在序列化为JSON之前修改对象

您可以使用LINQ select方法投影到匿名类型中。

您可能应该使用Profile属性的子集创建一个自定义对象。然后将原始对象转换为新的类似DTO的对象。(提示:尝试AutoMapper)。序列化并返回。

return Json(new{profile.FirstName, profile.LastName, profile.OtherFields}, JsonRequestBehavior.AllowGet);

我最终使用了继承。基本上,我有一个"共享"模型(基类)和一个派生该模型并向其添加一些额外字段的模型。在源代码处,我只需为我的REST API构造一个共享实例,而应用程序的其他部分则使用派生的实例。很简单,似乎效果很好。