C# 比较Json集合,返回更改值
我有不同字段的Json集合。所有字段都是动态的。请举下面的例子C# 比较Json集合,返回更改值,c#,json,C#,Json,我有不同字段的Json集合。所有字段都是动态的。请举下面的例子 [{"KB":"1","Id":"01","MemCode":1,"A":"2","B":"1","C":"2010-01-01T00:00:00","D":1} {"KB":"1","Id":"01","MemCode":2,"A":"2","B":"1","C":"2010-01-01T00:00:00","D":2}, {"KB":"1","Id":"01","MemCode":2,"A":"2","B":"1","C":"2
[{"KB":"1","Id":"01","MemCode":1,"A":"2","B":"1","C":"2010-01-01T00:00:00","D":1}
{"KB":"1","Id":"01","MemCode":2,"A":"2","B":"1","C":"2010-01-01T00:00:00","D":2},
{"KB":"1","Id":"01","MemCode":2,"A":"2","B":"1","C":"2010-01-01T00:00:00","D":3},
{"KB":"1","Id":"01","MemCode":2,"A":"2","B":"1","C":"2010-01-01T00:00:00","D":4}]
我想将四个数字的json与第一个进行比较,并确定变化,
就像在第四行中一样,Memcode是2,在第一行中Memcode是1。所以这里的memcode是从2变为1。
就像所有领域的智者一样。此字段可以是datetime/string等任何类型。这只是一个示例。JSON可能很长,包含许多字段。但所有json字符串都是相同的字段
所有字段都是动态的。我想要一些方法,做上述计算和返回字段的变化和旧的和新的价值观
我想使用C#和Newtonsoft.Json
。我不知道如何达到上述目标。你能帮我/引导我吗
先谢谢你
编辑:-5/10
你好,如果我不清楚,对不起。让我再解释一遍。我想开发一些接受JSON集合的通用方法。这个JSON有许多不同的字段。 假设集合具有5个JSON。所有5个JSON都有相同数量的字段和不同的值,或者可能是相同的值 现在我想比较JSON的第1个数和第N个数。确定已更改的字段。将该字段作为集合中的旧值/新值。旧值将是N个字段值,新值将是1个字段值。对于其他JSON,继续这样做。现在将第一个数字与N-1进行比较。并确定更改字段。继续此操作直到所有收集完成 返回值包括字段和旧值、新值 该字段可以按字符串、日期编号来显示 我可以使用for循环,但我需要一些通用的方法,它既省时又符合新的C#特性 希望这次我清楚了。
非常感谢..使用dynamic并将Json对象转换为以下内容
dynamic data= JsonConvert.DeserializeObject(your Json Object);
然后对数据使用普通的foreach循环进行比较您可以将每个
JSON
对象转换为List
,其中字符串表示一个或多个JSON
属性。然后使用方法比较这些列表。每个JSON
对象被序列化为string
,然后被,
拆分。通过拆分,JSON
属性被提取objArray
是包含JSON
对象的数组
List<List<string>> jsonAttList = new List<List<string>>();
int objArrayLength = objArray.Length;
for (int i = 0; i < objArrayLength; i++)
{
string objString = JsonConvert.SerializeObject(objArray[i]);
jsonAttList.Add(objString.Split(',').ToList());
}
两个JSON
对象之间的区别是字符串列表
第一个和第二个JSON
对象之间的区别是包含以下内容的列表:“MemCode”:1
,“myObj”:{“X”:1
,“Y”:2}
和“D”:1}
var difference01 = jsonAttList[0].Except(jsonAttList[1]).ToList();
var difference02 = jsonAttList[0].Except(jsonAttList[2]).ToList();
var difference03 = jsonAttList[0].Except(jsonAttList[3]).ToList();
第一个和第三个JSON
对象之间的区别是包含以下内容的列表:“MemCode”:1
,“Y”:2}
和“D”:1}
var difference01 = jsonAttList[0].Except(jsonAttList[1]).ToList();
var difference02 = jsonAttList[0].Except(jsonAttList[2]).ToList();
var difference03 = jsonAttList[0].Except(jsonAttList[3]).ToList();
第一个和第四个JSON
对象之间的区别是包含以下内容的列表:“MemCode”:1
,“Y”:2}
和“D”:1}
var difference01 = jsonAttList[0].Except(jsonAttList[1]).ToList();
var difference02 = jsonAttList[0].Except(jsonAttList[2]).ToList();
var difference03 = jsonAttList[0].Except(jsonAttList[3]).ToList();
第四个和第一个JSON
对象之间的区别是包含以下内容的列表:“MemCode”:2
,“Y”:2
,“Z”:3}
和“D”:4}
var difference30 = jsonAttList[3].Except(jsonAttList[0]).ToList();
如果您使用动态反序列化器,那么它将识别类型,然后您可以为该类型使用默认比较器您尝试了什么来获得结果?预期结果是什么,字段更改意味着什么?您好,如果我不清楚,很抱歉。让我再解释一遍。谢谢你的回复。我知道这件事,但我想要一个概括的解决方案。它可以接受集合中具有不同字段数的任何JSON。假设集合中有5个JSON字符串。我想将第一个字段与第五个字段进行比较,并确定哪个字段发生了变化。在第二个JSON之后,将其与第五个JSON进行比较,并确定更多的更改,等等……非常感谢Marko。这有可能是通用的解决方案吗?我明白你的意思。我也有类似的解决方案,但我不想要任何for循环。我想要一些通用的解决方案。你知道吗?非常感谢。您好@user13509456,很抱歉回复太晚。我很高兴能帮上忙。我已经编辑了答案,并添加了拆分JSON的较短方法。