C# 在MVC中测试控制器时如何强制转换恢复的JSON对象
我正在尝试为我的MVC控制器编写一些自动化的端到端集成测试,因为我们有严格的测试要求,仅仅测试服务是不够的 我有一个控制器,其方法如下: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
[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);