您可以尝试为json1和json2数据格式创建一些对象。
public class Item1
{
public string date { get; set; }
public int id { get; set; }
public string name { get; set; }
}
public class Object1
{
public List<Item1> items { get; set; }
}
public class Item2
{
public string date { get; set; }
public int id { get; set; }
public int age { get; set; }
public string address { get; set; }
public string Weight { get; set; }
}
public class Object2
{
public List<Item2> items { get; set; }
}
public class Item
{
public string date { get; set; }
public int id { get; set; }
public string name { get; set; }
public int age { get; set; }
public string address { get; set; }
public string Weight { get; set; }
}
public class Result
{
public List<Item> items { get; set; }
}
并使用DeserializeObject从json字符串中获取对象数据。
Object1 obj1 = JsonConvert.DeserializeObject<Object1>(Json1);
Object2 obj2 = JsonConvert.DeserializeObject<Object2>(Json2);
然后使用 linq join 创建结果列表。
var resultList = (from o1 in obj1.items
join o2 in obj2.items on o1.id equals o2.id
select new Item()
{
id = o1.id,
date = o1.date,
address = o2.address,
age = o2.age,
name = o1.name,
Weight = o2.Weight
}).ToList();
最终使用 SerializeObject 将 Result 转换为结果 json。
string jsonResult = JsonConvert.SerializeObject(new Result() { items = resultList });
编辑
如果你想避免创建过多的类,你可以尝试使用JObject.Parse
linq join on JToken 字典,所以你不需要创建对象类来携带 JSON 数据。
var obj1 = JObject.Parse(Json1);
var obj2 = JObject.Parse(Json2);
var resultList = (from o1 in obj1["items"]
join o2 in obj2["items"] on o1["id"] equals o2["id"]
select new Item()
{
id = o1["id"].ToObject<int>(),
date = o1["date"].ToObject<string>(),
address = o2["address"].ToObject<string>(),
age = o2["age"].ToObject<int>(),
name = o1["name"].ToObject<string>(),
Weight = o2["Weight"].ToObject<string>()
}).ToList();
JsonConvert.SerializeObject(new Result() { items = resultList });
string jsonResult = JsonConvert.SerializeObject(new Result() { items = resultList });
c# online
结果
{
"items":[
{
"date":"2018-08-25",
"id":1,
"name":"John",
"age":20,
"address":"USA",
"Weight":"256 kg"
}
]
}