CSON中的JSON.net数组diff

时间:2017-11-23 14:19:23

标签: c# arrays json

我有两个数组

"commanditaires_data": [
    {
        "id": "254",
        "level": 78
    },
    {
        "id": "255",
        "level": 22
    }
]

"commanditaires_data": [
    {
        "id": "254",
        "level": 78
    }, {
        "id": "255",
        "level": 22
    },
    {
        "id": "255",
        "level": 22
    }
]

我无法在第一个数组中获取缺少的项目。

我需要在这两个数组之间做差异。

我尝试使用Except()但是我发送了第一个数组的每个项目

我正在使用JSON.NET,因此我的数组变量是:

var srcObjs = source.Children().ToList().OfType<JObject>();
var tarObjs = target.Children().ToList().OfType<JObject>();

var diff = tarObjs.Except(src.objs);

=&GT;它发送给我tarObjs中的所有项目。

我需要处理很多案件:

 If srcObjs.Count() < tarObjs.Count() //Added item(s)
 If srcObjs.Count() > tarObjs.Count() // Deleted item(s)
 Else //Edited Item(s)

我也试过使用linq但没有成功

1 个答案:

答案 0 :(得分:2)

public class CommanditairesEqualityComparer: IEqualityComparer<Commanditaires>
    {

        public bool Equals(Commanditaires first, Commanditaires second)
        {
            if (first== null && first== null)
                return true;

            return first.Id == second.Id
                && first.Level == second.Level;
        }    

        public int GetHashCode(Commanditaires model)
        {
            return model.Id.GetHashCode() + model.Level.GetHashCode();
        }
    }

然后

var comparer = new CommanditairesEqualityComparer();
var distinctItems = firstList.Except(secondList, comparer );