{
"sessionid": "AQIC5wM2LY4SfcytTIcteNkTtCVrE8A-AS7VR*",
"Customers": [
{
"id": "4193942846",
"firstname": "Anto",
"lastname": "Paul",
"customertype": "ph",
"companyCode": "ABCD",
},
{
"id": "4193942236",
"firstname": "Dimple",
"lastname": "Paul",
"customertype": "ph",
"companyCode": "AB",
}
],
"Status": "ACTIVE",
"serviceStatus": "SUCCESS",
"Addresses": {
"Address": [
{
"type": "M",
"addr1": "11011, main st",
"addr2": "Apt. 2",
"zipcode": "11011"
}
]
}
}
以上结构根据我传递给服务的输入而有所不同。所以,我不能构造一个类来反序列化响应。我需要将此响应(属性 - 属性比较)与我已经拥有的响应(在不同的地方)进行比较。
我尝试用C#中的动态类做到这一点但到目前为止没有运气。有人可以分享更好的工作方法吗?谢谢。
答案 0 :(得分:1)
您可以像这样使用JToken.DeepEquals
:
var response = JObject.Parse(responseJson);
var goldenStandard = JObject.Parse(goldenStandardJson);
if (JToken.DeepEquals(response, goldenStandard))
{
// the two JSONs have the same data
}
答案 1 :(得分:0)
试试Json.Net。它支持动态结构。 这是一个教程: http://www.codeproject.com/Tips/631586/Dynamic-types-with-JSON-NET
答案 2 :(得分:0)
使用此:
https://jsonutil.codeplex.com/
var obj1 = JSONSerializer.Deserialize(jsontext1);
var obj2 = JSONSerializer.Deserialize(jsontext2);
bool Compare(object obj1, object obj2)
{
//if(obj1 is JSONObject && obj2 is JSONObject)
// => typecase and use jsonObj1.Members to iterate over members and compare values recursively
//if JSONArray, then iterate over items and compare
//if anything else... i.e. primitive then compare directly
//else return false;
}
答案 3 :(得分:-1)
如果您一次使用此JSON响应,则可以使用动态JSON NET类型。
但是如果你有时使用这个JSON结构响应,那么最好对ac#classes(对象)做出这个响应,这样你就可以很容易地访问它的属性了,你只需要你的c#对象和它们具有属性,您可以简单地接近您想要的每个字段(使用intellisense)。顺便说一句,将JSON响应复制到C#类(类似于复制粘贴)非常容易。以下是如何做到这一点: http://blogs.msdn.com/b/webdev/archive/2012/12/18/paste-json-as-classes-in-asp-net-and-web-tools-2012-2-rc.aspx