Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MVC3-在序列化为JSON之前修改对象_C#_Json_Asp.net Mvc 3 - Fatal编程技术网

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

C# MVC3-在序列化为JSON之前修改对象,c#,json,asp.net-mvc-3,C#,Json,Asp.net Mvc 3,我目前正在为我的应用程序开发一个小型RESTAPI。它很好用。但有一个问题。返回给用户的结果包含太多数据。我的控制器如下所示: public JsonResult Profile(string name) { var encodedName = HttpUtility.HtmlEncode(name); var n = encodedName.Replace('+', ' '); var profile = profileSource.GetProfileForName(

我目前正在为我的应用程序开发一个小型RESTAPI。它很好用。但有一个问题。返回给用户的结果包含太多数据。我的控制器如下所示:

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方法投影到匿名类型。

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

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

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

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

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

+1我喜欢这种方法,因为我们正在制作一个只读API。但是,如果我们使用POST a PUT来实现一个完整的REST API,那么像我在回答中建议的那样,让DTO对象在操作之间共享可能会更有效。API是只读的。我们将进一步研究这种方法。听起来很有希望+我喜欢这种方法,因为我们正在制作只读API。但是,如果我们使用POST a PUT来实现一个完整的REST API,那么像我在回答中建议的那样,让DTO对象在操作之间共享可能会更有效。API是只读的。我们将进一步研究这种方法。听起来很有希望!
return Json(new{profile.FirstName, profile.LastName, profile.OtherFields}, JsonRequestBehavior.AllowGet);