C# 在MVC中测试控制器时如何强制转换恢复的JSON对象

C# 在MVC中测试控制器时如何强制转换恢复的JSON对象,c#,json,asp.net-mvc,asp.net-core,C#,Json,Asp.net Mvc,Asp.net Core,我正在尝试为我的MVC控制器编写一些自动化的端到端集成测试,因为我们有严格的测试要求,仅仅测试服务是不够的 我有一个控制器,其方法如下: [HttpGet("myPath")] public async Task<ActionResult<IEnumerable<Foo>>> GetFoos() { Return Ok( _service.GetFoos()); } 将反序列化对象的实现更改为反序列化对象 var myList=JsonCo

我正在尝试为我的MVC控制器编写一些自动化的端到端集成测试,因为我们有严格的测试要求,仅仅测试服务是不够的

我有一个控制器,其方法如下:

 [HttpGet("myPath")]
 public async Task<ActionResult<IEnumerable<Foo>>> GetFoos()
 {
    Return Ok( _service.GetFoos()); 
 }

将反序列化对象的实现更改为
反序列化对象

var myList=JsonConvert.DeserializeObject(jsonFromResponse);
上述代码将自动返回所需
T
中的对象


阅读

中有关反序列化对象的详细信息,您应该使用所需类型为
var myList=JsonConvert.DeserializeObject(jsonFromResponse)的
DeserializeObject
这将自动在
IEnumerable
中给出响应。刚刚测试过,您的建议有效,奇怪的是,案例后面的反序列化对象不起作用,但您的解决方案在任何情况下都更干净!
DeserializeObject
返回
JArray
,这就是您获得强制转换异常的原因。使用重载方法,库将JArray转换为所需的指定类型。
Public Async Task TestController(){
…
Var result=await Client.GetAsync("/myPath");  var jsonFromResponse = await 
response.Content.ReadAsStringAsync();
var myList=(IEnumerable<Foo>)JsonConvert.DeserializeObject(jsonFromResponse);

// PERFORM ASSERTION on myList
}
[
  {
    "type": 1,
    "study": {
      "id": 96,
      "createdDate": "2017-10-10T00:00:00",
      "updatedDate": null,
      "X": null
    },
    "id": 262,
    "createdDate": "2019-10-14T07:36:40.104368",
    "updatedDate": "2019-10-14T07:36:40.118568"
  },
  {
    "type": 1,
    "study": {
      "id": 96,
      "createdDate": "2017-10-10T00:00:00",
      "updatedDate": null,
      "X": null
    },
    "id": 263,
    "createdDate": "2019-10-14T07:36:40.147418",
    "updatedDate": "2019-10-14T07:36:40.160704"
  },

…
]
var myList=JsonConvert.DeserializeObject<IEnumerable<Foo>>(jsonFromResponse);