如何从以C#返回IHttpActionResult的控制器获取JSON格式的数据?

如何从以C#返回IHttpActionResult的控制器获取JSON格式的数据?,c#,unit-testing,asp.net-web-api2,nunit,moq,C#,Unit Testing,Asp.net Web Api2,Nunit,Moq,我有一个控制器,它使用Newtonsoft.Json将IEnumerable转换为Json格式 [Route("")] public IHttpActionResult Get() { IEnumerable<Product> productList = ProductService.GetAllProducts(); if (!productList.Any()) return Ok(); return Json(productList,

我有一个控制器,它使用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() }
    });
}
现在,我正在为控制器编写单元测试(NUnit),我想在我的单元测试方法中获得这个JSON格式的数据。 我可以得到IEnumerable-

IHttpActionResult actionResult = mockProductControllerClient.Get();
JsonResult<IEnumerable<Product>> contentResult = actionResult as JsonResult<IEnumerable<Product>>;
IEnumerable<Product> data = contentResult.Content;
IHttpActionResult actionResult=mockProductControllerClient.Get();
JsonResult contentResult=actionResult作为JsonResult;
IEnumerable data=contentResult.Content;
我在单元测试方法中需要与POSTMAN中接收到的数据完全相同的数据,即JSON数据

我找到了答案-

IHttpActionResult将存储SerializerSettings,当响应被释放时,这些设置可能会在管道中应用

在单元测试中,由于我们从控制器(即管道中间)获取数据,因此我们必须自己应用SerializerSettings。 所以,第一步是从动作结果中提取IEnumerable-

IHttpActionResult actionResult = MockController.Get();
JsonResult<IEnumerable<Product>> contentResult = actionResult as JsonResult<IEnumerable<Product>>;
希望,这会帮助其他人。

我找到了答案-

IHttpActionResult将存储SerializerSettings,当响应被释放时,这些设置可能会在管道中应用

在单元测试中,由于我们从控制器(即管道中间)获取数据,因此我们必须自己应用SerializerSettings。 所以,第一步是从动作结果中提取IEnumerable-

IHttpActionResult actionResult = MockController.Get();
JsonResult<IEnumerable<Product>> contentResult = actionResult as JsonResult<IEnumerable<Product>>;

希望,这会对其他人有所帮助。

我在单元测试方法中需要的数据与在POSTMAN中收到的数据完全相同。
为什么需要这些?这就是ASP.NET的工作,对数据进行JSON编码。你的单元测试不需要测试它。你可以做一个内存中的集成测试,它看起来像来自PostMan为什么要测试控制器,或者你的控制器返回JSON的能力。当然,您只想测试您的产品列表是否有效。对于Asp.Net Web API 2。*您可以从我在@mjwills上写的一个回答中执行类似的操作:我想测试json键在骆驼壳中这样的情况?
我在单元测试方法中需要与POSTMAN中接收到的数据完全相同的数据
为什么您需要这些?这就是ASP.NET的工作,对数据进行JSON编码。你的单元测试不需要测试它。你可以做一个内存中的集成测试,它看起来像来自PostMan为什么要测试控制器,或者你的控制器返回JSON的能力。当然,您只想测试您的产品列表是否有效。对于Asp.Net Web API 2。*您可以从我之前写的@mjwills的回答中执行类似的操作:我想测试json键在骆驼壳中这样的情况?
string responseString = JsonConvert.SerializeObject(contentResult.Content, contentResult.SerializerSettings);
JArray responseJson = JArray.Parse(responseString);