为什么Controller.Json和Newtonsoft Json返回不同的结果?

时间:2019-04-18 07:36:18

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

我有一个匿名对象,其中包含匿名对象的集合,但是将其更改为json在controller's JsonNewtonsoft Json之间有所不同-如何从Json(data)中删除那些其他字段? / p>

var dataFromDb = _context
                 .Users
                 .Select(x => new { x.id, x.name })
                 .ToList();

var data = new { something = true, data = dataFromDb};

使用Newtonsoft json时的结果:

return StatusCode(200, JsonConvert.SerializeObject(data));

{
    "something": true,
    "data": [
        {
            "id": "d5696edd-4321-4dba-9eba-c4df3644bb78",
            "name": "XYZ"
        }
    ]
}

return StatusCode(200, Json(data));

{
    "contentType": null,
    "serializerSettings": null,
    "statusCode": null,
    "value":
    {
        "something": true,
        "data": 
        [
            {
                "id": "d5696edd-4321-4dba-9eba-c4df3644bb78",
                "name": "XYZ"
            }
        ]
    }
}

1 个答案:

答案 0 :(得分:3)

因为Controller.Json产生了JsonResult对象,该对象包含其他参数。这些概述可在here中找到。而Newtonsoft将指定的对象序列化为JSON字符串。

明智的数据(您进行序列化),它们的结果相同。


如果要附加到这些属性,则通常是在对象上使用getter和setter:

return new JsonResult(result)
{
    StatusCode = 200
};

此对象应从控制器而不是return StatusCode(200, Json(data));

返回

还值得指出的是,Json是JsonResult的扩展方法(帮助器方法)。它们都返回相同的东西,即JsonResult的实例(后者又继承了ActionResult)。

调用JsonJsonResult是一个优先事项,您将不必为Json编写,也不必在您的实例中声明JsonResult的实例。控制器,因为它将在后台为您完成。