我生成了这个序列化字典:
[
{
"Example":{
"Etq":"Demo",
"Val":123
},
"Example2":{
"Etq":"Demo2",
"Val":235
},
"Sections[0]":{
"Titulo":"Header 1",
"Data[0]":{
"Etq":"lorem ipsum",
"Val":"temp"
},
"Data[1]":{
"Etq":"lorem ipsum 2",
"Val":null
}
},
"Sections[1]":{
"Titulo":"Header 2",
"Data[0]":{
"Etq":"lorem ipsum",
"Val":"56544"
},
"Data[1]":{
"Etq":"lorem ipsum 367",
"Val":"temp3334"
},
"Data[2]":{
"Etq":"Some etq",
"Val":"Some value"
}
}
]
我从数据库中接收以下格式的数据:
所以在C#中,我拆分了该列名,并放入了字符串数组,然后使用var chainNodes传递给我的方法。
这是我做嵌套字典的递归函数:
//Initial parameters "false, ref new Dictionay<string, object>(), ['Example', 'Etq'], 'Demo', 0"
private static object DoCreate(bool nested, ref Dictionary<string, object> row, string[] chainNodes, object value, int index){
try
{
var res = new Dictionary<string, object>();
var lastE = chainNodes.Length - 1;
if(index == chainNodes.Length - 1)
{
res.Add(chainNodes[index], value);
}
else
{
if (!nested)
{
var _row = row;
int pivot = 0;
for(int i = index; i <= lastE; i++)
{
if(_row.ContainsKey(chainNodes[i]))
{
_row = ((Dictionary<string, object>)_row[chainNodes[i]]);
}
else
{
pivot = i;
break;
}
}
if (pivot == lastE)
_row.Add(chainNodes[pivot], value);
else
_row.Add(chainNodes[pivot], DoCreate(true, ref _row, chainNodes, value, pivot + 1));
return null;
}
res.Add(chainNodes[index], DoCreate(true, ref row, chainNodes, value, index + 1));
}
return res;
}
catch(Exception)
{
throw;
}
}
我需要修改以显示此格式:
[
{
"Example":{
"Etq":"Demo",
"Val":123
},
"Example2":{
"Etq":"Demo2",
"Val":235
},
"Sections":[
{
"Titulo":"Header 1",
"Data":[
{
"Etq":"lorem ipsum",
"Val":"temp"
},
{
"Etq":"lorem ipsum 2",
"Val":null
}
]
},
{
"Titulo":"Header 2",
"Data":[
{
"Etq":"lorem ipsum",
"Val":"56544"
},
{
"Etq":"lorem ipsum 367",
"Val":"temp3334"
},
{
"Etq":"Some etq",
"Val":"Some value"
}
]
}
]
}
]