我正在比较两个解析的字符串,到目前为止,这对我们所有的测试都完美无缺。
但是,我遇到过当数组中对象的顺序不相同时 DeepEquals 失败的情况。
如果我更新一个 Json 以匹配另一个,则测试通过。
// data is a string (a .json file read as text)
JToken expectedJson = JToken.Parse(data).SelectToken(jPath);
// Content is a string (the response body as returned by RestSharp
JToken jsonResponse = JToken.Parse(Content);
return JToken.DeepEquals(expectedJson, jsonResponse);
首先是API返回的JSON:
{
"isHohrResponse": true,
"messages": [],
"success": true,
"data": {
"totalPaid": 301,
"requiresConfirmation": false,
"jobs": [
{
"jobId": "600dea62-f084-4459-9e91-8e809884d130",
"jobName": "Job I",
"fee": 76,
"totalPayed": 76,
"paymentUserInfo": [
{
"id": "ab2b408d-1e44-408e-b8e4-df779e31e37d",
"name": "Frederik25 D",
"isStarted": true,
"hasLiked": true
}
],
"requiresConfirmation": false
},
{
"jobId": "ca0a14b4-0206-45ba-9c31-cd5fa7745058",
"jobName": "Job H",
"fee": 75,
"totalPayed": 225,
"paymentUserInfo": [
{
"id": "3a1a91cf-03f9-4f06-9679-c339ddc295d7",
"name": "Frederik23 D",
"isStarted": true,
"hasLiked": true
},
{
"id": "9e323b98-08dc-4bc0-854e-f42711258252",
"name": "Frederik26 D",
"isStarted": true,
"hasLiked": true
},
{
"id": "68ab2e64-6356-4263-a8cb-2953deb675b6",
"name": "Frederik24 D",
"isStarted": true,
"hasLiked": true
}
],
"requiresConfirmation": false
}
]
}
}
现在,JSON 以不同的顺序具有最终的 paymentUserInfo 对象:
{
"isHohrResponse": true,
"messages": [],
"success": true,
"data": {
"totalPaid": 301,
"requiresConfirmation": false,
"jobs": [
{
"jobId": "600dea62-f084-4459-9e91-8e809884d130",
"jobName": "Job I",
"fee": 76,
"totalPayed": 76,
"paymentUserInfo": [
{
"id": "ab2b408d-1e44-408e-b8e4-df779e31e37d",
"name": "Frederik25 D",
"isStarted": true,
"hasLiked": true
}
],
"requiresConfirmation": false
},
{
"jobId": "ca0a14b4-0206-45ba-9c31-cd5fa7745058",
"jobName": "Job H",
"fee": 75,
"totalPayed": 225,
"paymentUserInfo": [
{
"id": "68ab2e64-6356-4263-a8cb-2953deb675b6",
"name": "Frederik24 D",
"isStarted": true,
"hasLiked": true
},
{
"id": "9e323b98-08dc-4bc0-854e-f42711258252",
"name": "Frederik26 D",
"isStarted": true,
"hasLiked": true
},
{
"id": "3a1a91cf-03f9-4f06-9679-c339ddc295d7",
"name": "Frederik23 D",
"isStarted": true,
"hasLiked": true
}
],
"requiresConfirmation": false
}
]
}
}
我也遇到过同样的问题。 这是一个复制它的链接。 https://dotnetfiddle.net/SEMSJZ
我现在找到了一个解决方法:) 但它确实涉及创建一个类来反序列化json
var expectedJson = JsonConvert.SerializeObject(JsonConvert.DeserializeObject<SomeClass>(expected));
var mappedJson = JsonConvert.SerializeObject(JsonConvert.DeserializeObject<SomeClass>(mapped));
Assert.True(JToken.DeepEquals(expectedJson, mappedJson));
制作了一个自定义差异检查器,一旦 DeepEquals 失败就会触发。 奇迹般有效。 能够忽略数组顺序(DeepEquals 的布尔参数?)
最有用的评论
制作了一个自定义差异检查器,一旦 DeepEquals 失败就会触发。 奇迹般有效。 能够忽略数组顺序(DeepEquals 的布尔参数?)