使用 Web API 时 JSON 数据中的额外项目

Ina*_*can 1 aspnetboilerplate

我对来自 Web API 服务的 JSON 数据有疑问。

\n\n

在常规 Web API 控制器中,我得到下面给出的结果。

\n\n\n\n
[\n  {\n    "title": "ba\xc5\x9fl\xc4\xb1k",\n    "description": "Tan\xc4\xb1mlama",\n    "creationTime": "2018-01-15T17:20:06.9801797",\n    "state": 0,\n    "assignedPersonId": "afd46520-521d-4945-a4ee-083893e1d14c",\n    "assignedPersonName": "derya",\n    "id": 2\n  },\n  {\n    "title": "title",\n    "description": "description",\n    "creationTime": "2018-01-15T17:17:26.5161288",\n    "state": 0,\n    "assignedPersonId": null,\n    "assignedPersonName": null,\n    "id": 1\n  }\n]\n
Run Code Online (Sandbox Code Playgroud)\n\n

但是,当使用 ASP.NET Boilerplate 基础设施时,我得到的数据与以下内容相同:

\n\n
{\n  "result": {\n    "items": [\n      {\n        "title": "ba\xc5\x9fl\xc4\xb1k",\n        "description": "Tan\xc4\xb1mlama",\n        "creationTime": "2018-01-15T17:20:06.9801797",\n        "state": 0,\n        "assignedPersonId": "afd46520-521d-4945-a4ee-083893e1d14c",\n        "assignedPersonName": "derya",\n        "id": 2\n      },\n      {\n        "title": "title",\n        "description": "description",\n        "creationTime": "2018-01-15T17:17:26.5161288",\n        "state": 0,\n        "assignedPersonId": null,\n        "assignedPersonName": null,\n        "id": 1\n      }\n    ]\n  },\n  "targetUrl": null,\n  "success": true,\n  "error": null,\n  "unAuthorizedRequest": false,\n  "__abp": true\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

看起来实际的原始数据嵌套在外部数据结构中。因此,像下面这样的反序列化不起作用。

\n\n
List<Class1> data = JsonConvert.DeserializeObject<List<Class1>>(JSONString); \n
Run Code Online (Sandbox Code Playgroud)\n\n

我必须管理 上的一些字符串操作JSONString

\n\n

难道我做错了什么?提前致谢。

\n

aar*_*ron 5

来自WrapResult 和 DontWrapResult 属性的文档:

您可以使用控制器的一个操作或所有操作的WrapResultDontWrapResult属性来控制换行。

ASP.NET MVC 控制器

如果返回类型为JsonResult(或异步操作的 Task<JsonResult>),则默认情况下, ASP.NET Boilerplate会包装ASP.NET MVC 操作结果。您可以使用WrapResult属性更改此设置,如下所示:

public class PeopleController : AbpController
{
    [HttpPost]
    [WrapResult(WrapOnSuccess = false, WrapOnError = false)]
    public JsonResult SavePerson(SavePersonModel person)
    {
        // TODO: save new person to database and return new person's id
        return Json(new {PersonId = 42});
    }
}
Run Code Online (Sandbox Code Playgroud)

作为快捷方式,我们可以只使用[DontWrapResult],它与本示例相同。

您可以从启动配置更改此默认行为。

这不仅适用于 ASP.NET MVC 控制器,还适用于 ASP.NET Web API 控制器、动态 Web API 层和 ASP.NET Core 控制器。