我有一个数据对象,该对象已从json响应中反序列化,其属性格式为:
[0] ....
GroupName:“组1”
成员列表:[用户ID的字符串数组]
[1]
GroupName:“第2组”
成员列表:[用户ID的字符串数组]
。
。等等
我想弄平它,以便它只返回两列,例如:
用户名,名称
1,第1组
2,第1组
3,第1组
4,第2组
5,第2组
等等。
用户ID在所有组中都是唯一的,因为用户仅是1个组的成员
我尝试过:
var group = JsonConvert.DeserializeObject(<My Json File>);
var gpObject = JsonConvert.DeserializeObject<GroupDetailResponse>(group.ToString());
var memberGroup = gpObject.Data.Select(y => new { UserId = y.Memberlist.SelectMany(sl => y.memberlist).ToArray(), GroupName = y.Id }).ToArray();
但这不会返回我上面期望的结果。
任何帮助将不胜感激-谢谢。
JSON SNIPPET:
"data": [
{
"id": "ZZ1",
"name": "Group1",
"memberList": [
"User1",
"User2",
"User3"
]
},
{
"id": "ZZ2",
"name": "Group2",
"memberList": [
"User4",
"User5"
],
}
]
还有DTO:
public class GroupDetailResponse
{
[JsonProperty("data")]
public GroupInformation[] Data { get; set; }
}
public class GroupInformation
{
[JsonProperty("id")]
public string Id { get; set; }
[JsonProperty("name")]
public string Name { get; set; }
[JsonProperty("memberList")]
public string[] MemberList { get; set; }
}
}
答案 0 :(得分:0)
这应该对您有用:
var memberGroup1 = gpObject.SelectMany(x => x.Memberlist, (group, id) => new { id, group.GroupName});
如果将结果选择器函数传递给SelectMany调用,则可以使用该函数将“父项(在这种情况下为GroupName)与“子”值(在这种情况下为User ID)合并在一起。
此博客很好地解释了SelectMany扁平化对象的用法,包括使用结果选择器:http://blogs.interknowlogy.com/2008/10/10/use-linqs-selectmany-method-to-flatten-collections/