如何从 C# 中返回 IHttpActionResult 的控制器获取 JSON 格式的数据?
How to get data in JSON format from a controller returning IHttpActionResult in C#?
我有一个使用 Newtonsoft.Json 将 IEnumerable 转换为 JSON 格式的控制器。
[Route("")]
public IHttpActionResult Get()
{
IEnumerable<Product> productList = ProductService.GetAllProducts();
if (!productList.Any())
return Ok();
return Json(productList, new JsonSerializerSettings
{
ContractResolver = new WebContractResolver(),
Converters = new List<JsonConverter> { new TrimStringDataConverter() }
});
}
当我通过 POSTMAN 到达 API 终点时,它给了我预期的 JSON 数据。
[
{
"code": "prod101",
"title": "LAPTOP"
},
{
"code": "prod102",
"title": "MOBILE"
}
]
现在,我正在为控制器编写单元测试 (NUnit),我想在我的单元测试方法中获取此 JSON 格式的数据。
我能够获得 IEnumerable -
IHttpActionResult actionResult = mockProductControllerClient.Get();
JsonResult<IEnumerable<Product>> contentResult = actionResult as JsonResult<IEnumerable<Product>>;
IEnumerable<Product> data = contentResult.Content;
我需要单元测试方法中的数据与在 POSTMAN 中接收到的数据完全相同,即 JSON 数据
我找到了答案 -
IHttpActionResult 会保存 SerializerSettings,当响应被关闭时,它可能会应用到管道中。
在单元测试中,由于我们从控制器获取数据,即在管道中间,我们必须自己应用 SerializerSettings。
因此,第一步是从操作结果中提取 IEnumerable -
IHttpActionResult actionResult = MockController.Get();
JsonResult<IEnumerable<Product>> contentResult = actionResult as JsonResult<IEnumerable<Product>>;
然后,应用序列化程序设置并获取您的 json -
string responseString = JsonConvert.SerializeObject(contentResult.Content, contentResult.SerializerSettings);
JArray responseJson = JArray.Parse(responseString);
希望,这会对其他人有所帮助。
我有一个使用 Newtonsoft.Json 将 IEnumerable 转换为 JSON 格式的控制器。
[Route("")]
public IHttpActionResult Get()
{
IEnumerable<Product> productList = ProductService.GetAllProducts();
if (!productList.Any())
return Ok();
return Json(productList, new JsonSerializerSettings
{
ContractResolver = new WebContractResolver(),
Converters = new List<JsonConverter> { new TrimStringDataConverter() }
});
}
当我通过 POSTMAN 到达 API 终点时,它给了我预期的 JSON 数据。
[
{
"code": "prod101",
"title": "LAPTOP"
},
{
"code": "prod102",
"title": "MOBILE"
}
]
现在,我正在为控制器编写单元测试 (NUnit),我想在我的单元测试方法中获取此 JSON 格式的数据。 我能够获得 IEnumerable -
IHttpActionResult actionResult = mockProductControllerClient.Get();
JsonResult<IEnumerable<Product>> contentResult = actionResult as JsonResult<IEnumerable<Product>>;
IEnumerable<Product> data = contentResult.Content;
我需要单元测试方法中的数据与在 POSTMAN 中接收到的数据完全相同,即 JSON 数据
我找到了答案 -
IHttpActionResult 会保存 SerializerSettings,当响应被关闭时,它可能会应用到管道中。
在单元测试中,由于我们从控制器获取数据,即在管道中间,我们必须自己应用 SerializerSettings。 因此,第一步是从操作结果中提取 IEnumerable -
IHttpActionResult actionResult = MockController.Get();
JsonResult<IEnumerable<Product>> contentResult = actionResult as JsonResult<IEnumerable<Product>>;
然后,应用序列化程序设置并获取您的 json -
string responseString = JsonConvert.SerializeObject(contentResult.Content, contentResult.SerializerSettings);
JArray responseJson = JArray.Parse(responseString);
希望,这会对其他人有所帮助。