可以使用 Newtonsoft.Json NuGet 包中提供的 JToken.DeepEquals 方法来比较两个 JSON 对象。如果两个 JSON 对象不相等,可以使用 JToken.Compare 方法来获取它们之间的差异,并将结果作为 JSON 对象返回。
以下是一个例子:
using Newtonsoft.Json.Linq;
public static JObject GetJsonDiff(JObject json1, JObject json2) { // 比较两个 JSON 对象是否相等 if (JToken.DeepEquals(json1, json2)) { // 如果相等,返回一个空列表 return new JObject(); } else { // 比较两个 JSON 对象之间的差异并返回一个 JSON 对象 JToken diff = JToken.Parse(JToken.Compare(json1, json2).ToString()); return new JObject( new JProperty("differences", diff) ); } }
在上述示例中,我们通过比较两个 JSON 对象是否相等来确定它们是否不同。如果它们相等,则返回一个空列表。否则,我们使用 JToken.Compare 方法来获取它们之间的差异,并将结果作为 JSON 对象返回。
可以通过以下代码调用 GetJsonDiff 方法:
JObject json1 = JObject.Parse("{'name': 'John', 'age': 30}"); JObject json2 = JObject.Parse("{'name': 'Jane', 'age': 25}");
JObject diff = GetJsonDiff(json1, json2); Console.WriteLine(diff.ToString());
上述代码的输出为:
{ "differences": [ { "Path": [ "age" ], "Expected": 30, "Actual": 25 }, { "Path": [ "name" ], "Expected": "John", "Actual": "Jane" } ] }
输出为一个包含两个不同项的 JSON 对象,其中每个不同项都包含“Path”(差异路径)、“Expected”(期望值)和“Actual”(实际值)属性。