"[{" id ":" 1 "," Name ":" 刘德华 "," age ":" 33 "},{" id ":" 2 "," Name ":" 张学友 "," age ":" 55 "}]" ; "[{" id ":" 1 "," age ":" 33 "," Name ":" 刘德华 "},{" id ":" 2 "," age ":" 55 "," Name ":" 张学友 "}]" ;

1、转为对象数组进行比较试一试

我们先转换成对数组对象比较试一试。这里使用的是

string json1 = "[{\" id\ ":\" 1 \ ",\" Name\ ":\" 刘德华\ ",\" age\ ":\" 33 \ "},{\" id\ ":\" 2 \ ",\" Name\ ":\" 张学友\ ",\" age\ ":\" 55 \ "}]" ; string json2 = "[{\" id\ ":\" 1 \ ",\" age\ ":\" 33 \ ",\" Name\ ":\" 刘德华\ "},{\" id\ ":\" 2 \ ",\" age\ ":\" 55 \ ",\" Name\ ":\" 张学友\ "}]" ; var jsondocument1 = JsonSerializer.Deserialize<List<object>>(json1); var jsondocument2 = JsonSerializer.Deserialize<List<object>>(json2); var JsonDocumentd= jsondocument.Equals(jsondocument2) ; var IsEqual= Equals(jsondocument1 ,jsondocument2) ; Console.WriteLine(IsEqual); Console.ReadLine; //输出:false

这种方法不能比较,因为引用类型在内存是存储的引用地址,存储在堆上,所以对象的比较不能这么用,通常可以重写Equals方法,在里面具体判断两个对象的各属性是否相等,如果全相等返回true,只要有一项不相等则返回false,如果是数组就更加麻烦了。具体实例这里就不演示了。那么就没法好地比较了吗?有的,下面就介绍。

2、用Newtonsoft的特性比较

其实处理的Json的Newtonsoft包提供了比较方法。首先要在nuget引用Newtonsoft包。代码如下。

string json1 = "[{\" id\ ":\" 1 \ ",\" Name\ ":\" 刘德华\ ",\" age\ ":\" 33 \ "},{\" id\ ":\" 2 \ ",\" Name\ ":\" 张学友\ ",\" age\ ":\" 55 \ "}]" ; string json2 = "[{\" id\ ":\" 1 \ ",\" age\ ":\" 33 \ ",\" Name\ ":\" 刘德华\ "},{\" id\ ":\" 2 \ ",\" age\ ":\" 55 \ ",\" Name\ ":\" 张学友\ "}]" ; var rel1 = JArray.Parse(json1); var rel2 = JArray.Parse(json2); var rel3=JArray.DeepEquals(rel1 , rel2); Console.WriteLine(rel3); Console.ReadLine; //输出:true

这里先把json字符串转成Array,然后用JArray.DeepEquals特性对比。输出true,完美解决。

本文讲述了用C#代码判断json数组是否相等的方法,使用对象的比较是行不通的,好在 Newtonsoft 提供了DeepEquals特性来比较。你有啥方法来比较吗?.NET Core的新特性System.Text.Json能比较吗?欢迎大家留言讨论或提出异议。

关注: DotNet开发跳槽

觉得不错,请点个 在看 返回搜狐,查看更多

责任编辑:

平台声明:该文观点仅代表作者本人,搜狐号系信息发布平台,搜狐仅提供信息存储空间服务。