我有两个需要比较的JSON对象。但是我想排除某些属性。有没有一种有效的方法可以不迭代所有的密钥?
我正在使用JSON.NET,它有JToken.DeepEquals()并且很棒,但它不允许我排除某些键。
谢谢!
答案 0 :(得分:1)
好吧,首先我建议将JSON解析为某种对象。我们不应该建议外部工具,但你应该能够通过简单的谷歌搜索找到满意的东西。
反序列化通常需要创建某种类/结构来保存json对象的键/值。现在你有一个可以添加方法的对象。
覆盖对象的.Equals(),==运算符和!=运算符函数,并提供比较两个对象的实现细节,忽略不重要的键。
覆盖的一些示例代码:
public class DateRange
{
public DateRange(DateTime start, DateTime end)
{
if (start>end)
{
throw new ArgumentException("Start date time cannot be after end date time");
}
Start = start;
End = end;
}
public DateTime Start { get; private set; }
public DateTime End { get; private set; }
public static bool operator ==(DateRange range1, DateRange range2)
{
if (range1.Start == range2.Start && range1.End == range2.End)
{
return true;
}
return false;
}
public static bool operator !=(DateRange range1, DateRange range2)
{
return !(range1 == range2);
}
}
答案 1 :(得分:1)
首先,正如C Bauer建议的那样,您应该将JSON反序列化为某种对象。然后,您可以为此对象创建一个带有IEqualityComparer接口的类。
class Compare : IEqualityComparer<YourClass>
{
public bool Equals(YourClass x, YourClass y)
{
// add your comparison logic
return x.Property == y.Property;
}
public int GetHashCode(YourClass something)
{
// return a hashcode based on your unique properties
return something.Property.GetHashCode();
}
}
请参阅http://www.dreamincode.net/forums/topic/352582-linq-by-example-3-methods-using-iequalitycomparer/以了解LINQ的一些使用示例。