请问各位靓仔美女,C# JSON如何根据对象的几个值去重对象?有什么linq语句可以快捷去重吗?

JSON如下:

{

"dt": 123,

"result": {

"rr": 29,

"aa": 12,

"data": [

{

"num": "121",

"ser": "067",

"name": "小明",

"num1": 53,

"num2": 28

},

{

"num": "230",

"ser": "712",

"name": "小张",

"num1": 52,

"num2": 35

},

{

"num": "121",

"ser": "556",

"name": "小明",

"num1": 53,

"num2": null

}

]

}

}

压缩的JSON:
string json="{"dt":123,"result":{"rr":29,"aa":12,"data":[{"num":"121","ser":"067","name":"小明","num1":53,"num2":28},{"num":"230","ser":"712","name":"小张","num1":52,"num2":35},{"num":"121","ser":"556","name":"小明","num1":53,"num2":null}]}}";
JObject job = JObject.Parse(json);
使用Newtonsoft
希望根据对象几个相同的值(num值:121、name值:小明、num1值:53)条件,多条件去重得到的结果如下:
{

"dt": 123,

"result": {

"rr": 29,

"aa": 12,

"data": [

{

"num": "121",

"ser": "067",

"name": "小明",

"num1": 53,

"num2": 28

},

{

"num": "230",

"ser": "712",

"name": "小张",

"num1": 52,

"num2": 35

}

]

}

}

为去重的JSON与多条件去重对象后的JSON内容如下图片:

img

img

使用Newtonsoft.Json反序列化,然后使用LINQ的GroupBy进行分组即可,示例代码如下:

using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;

namespace ConsoleApp2
{
    internal class Program
    {
        static void Main(string[] args)
        {
            var json = "{\"dt\":123,\"result\":{\"rr\":29,\"aa\":12,\"data\":[{\"num\":\"121\",\"ser\":\"067\",\"name\":\"小明\",\"num1\":53,\"num2\":28},{\"num\":\"230\",\"ser\":\"712\",\"name\":\"小张\",\"num1\":52,\"num2\":35},{\"num\":\"121\",\"ser\":\"556\",\"name\":\"小明\",\"num1\":53,\"num2\":null}]}}";
            var response = JsonConvert.DeserializeObject<Response>(json);
            var result = response.result.data.GroupBy(g => new
            {
                g.name,
                g.num,
                g.num1
            }).Select(x => x.FirstOrDefault()).ToList();
            Console.WriteLine(JsonConvert.SerializeObject(result));
            Console.ReadKey();
        }
    }

    public class Datum
    {
        public string num { get; set; }
        public string ser { get; set; }
        public string name { get; set; }
        public int num1 { get; set; }
        public int? num2 { get; set; }
    }

    public class Result
    {
        public int rr { get; set; }
        public int aa { get; set; }
        public List<Datum> data { get; set; }
    }

    public class Response
    {
        public int dt { get; set; }
        public Result result { get; set; }
    }
}

运行结果:

img

更多LINQ的知识,请参考我正在写的《LINQ教程》: