1

おはようございます。JSON 応答 (以下のようなもの) を返すサービスがあります。

{
  "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"
      }
     ]
    } 
}

上記の構造は、サービスに渡す入力によって異なります。したがって、1 つのクラスを作成して応答を逆シリアル化することはできません。この応答を、既に (別の場所に) 持っている応答と比較 (属性-属性比較) する必要があります。

私はC#の動的クラスでそれをやろうとしましたが、今のところ運がありません. 誰かがより良い、実用的なアプローチを共有できますか? ありがとうございました。

4

4 に答える 4

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 
}
于 2015-08-03T09:09:51.847 に答える
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;
}
于 2013-10-15T02:17:34.473 に答える
-1

この JSON 応答を 1 回使用する場合は、動的な JSON NET タイプを使用できます。

ただし、この JSON 構造応答を使用する場合は、この応答を ac# クラス (オブジェクト) に作成することをお勧めします。そのため、そのプロパティに非常に簡単にアクセスできます。c# オブジェクトだけがあり、それらにはプロパティがあります。必要な各フィールドに簡単にアプローチできます(インテリセンスを使用)。ところで、JSON 応答を C# クラスにコピーするのは非常に簡単です (コピー ペーストのようなもの)。これを行う方法は次のとおりです 。 -2-rc.aspx

于 2013-10-14T18:59:59.920 に答える