如何比较两个忽略 C# 中某些键的 JSON



我有两个JSON对象需要比较。但是我想排除某些属性。有没有一种有效的方法可以在不遍历所有键的情况下做到这一点?

我正在使用具有JToken.DeepEquals()的 JSON.NET 并且非常出色,但它不允许我排除某些键。

谢谢!

好吧,首先我建议将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);
    }
}

首先,正如 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 的几个示例。

相关内容

  • 没有找到相关文章

最新更新