我有一个匿名对象,其中包含匿名对象的集合,但是将其更改为json在controller's Json
和Newtonsoft 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"
}
]
}
}
答案 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
)。
调用Json
或JsonResult
是一个优先事项,您将不必为Json
编写,也不必在您的实例中声明JsonResult
的实例。控制器,因为它将在后台为您完成。