我通过从对象List中读取一些数据,将其转换为嵌套的Dictionaries并序列化结果来创建JSON文件。所需的JSON格式如下:
InBetween
但我得到的是这个JSON输出:
{
"Employee1": {
"YYY": {
"StartRange": 11,
"EndRange": 22
}
},
"Employee2": {
"XXX": {
"StartRange": 24,
"EndRange": 56
}
}
}
以下是我正在使用的代码:
{
"Employee1": {
"YYY": {
"StartRange": 11,
"EndRange": 22
},
"XXX": {
"StartRange": 11,
"EndRange": 22
}
},
"Employee2": {
"YYY": {
"StartRange": 24,
"EndRange": 56
},
"XXX": {
"StartRange": 24,
"EndRange": 56
}
}
}
我认为问题可能与两个类中都有StartRange和EndRange有关,但我不知道如何修复它。我做错了什么?
答案 0 :(得分:0)
问题在于GetData
方法中的代码:
var labelData = new Dictionary<string, Dictionary<string, LabelData>>();
foreach (var listItem in configList)
{
labelData[listItem.ParentGroup] =
configList.Distinct().ToDictionary(x => x.Label.ToString(), row => new LabelData()
{
StartRange = Convert.ToInt32(listItem.StartRange.ToString()),
EndRange = Convert.ToInt32(listItem.EndRange.ToString())
});
}
对于列表中的每个ConfigInfo
项,您要在结果中添加Dictionary
,其中<{1>} 列表中的每个项目与当前项目的Label
和StartRange
。
我认为你真正想要的是按EndRange
对项目进行分组,然后为每个只包含该组中项目的组创建词典。用以下代码替换上面的代码,你应该得到你期望的输出:
ParentGroup
小提琴:https://dotnetfiddle.net/nzkj0h
顺便说一句,我想我会建议您将var labelData = configList
.GroupBy(c => c.ParentGroup)
.ToDictionary(
g => g.Key,
g => g.ToDictionary(
c => c.Label,
c => new LabelData
{
StartRange = c.StartRange,
EndRange = c.EndRange
}
)
);
方法重命名为GetData
,因为这正是它正在做的事情。