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

时间:2012-02-07 11:31:20

标签: c# json asp.net-mvc-3

我目前正在为我的应用程序开发一个小型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。但是,这些方法中的任何一种都会增加一些额外的开销。

4 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

您应该使用Profile的属性子集来执行自定义对象。然后将原始对象转换为新的DTO对象。 (提示:尝试AutoMapper)。序列化并返回。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

我最终使用了继承。基本上我有一个“共享”模型(基类)和一个派生它并向其添加一些额外字段的模型。在源代码中,我只是为我的REST API构建一个共享实例,而应用程序的另一部分则使用派生的实例。非常简单,似乎运作良好。