Существует класс следующего вида:
public class Block
{
public string title; // название класса
public Dictionary<string, object> property; // свойства, object может быть string или List<string>
public Block parent; // ссылка на блок родителя
}
По сути это отображение формата JSON, например такой вот JSON :
{
"query_block": {
"select_id": 1,
"table": {
"table_name": "firmsmaterials",
"access_type": "ALL",
"rows": 11,
"filtered": 100
}
}
}
будет вот таким набором объектов класса Block
1: Block 1
title = query_block
poperties = "select_id : 1"
parent = null
2: Block 2
title = table
properties =...
parent = Block 1
итд...
Вообщем где в JSON встречается "{" создаётся новый блок с ссылкой на родителя (изначально это было задумано для рисования блок схем JSON-а). Так или иначе на выходе я получаю List.
Я захотел преобразовать этот List в TreeView, примерно такого вида:
query_block >
...select_id : 1
...table>
......"table_name": "firmsmaterials",
......"access_type": "ALL",
......"rows": 11,
......"filtered": 100
И так до бесконечности. Я попробовал написать код, который бы преобразовывал List в TreeView, но он совершенно не работает так как я хочу. Честно говоря уже не знаю что сделать:
StringBuilder arrProperties;
TreeViewItem tvItem, ptvItem = new TreeViewItem { Header = "root"};
foreach (Block b in blocks)
{
tvItem = new TreeViewItem { Header = b.title };
foreach(KeyValuePair<string, object> i in b.property)
{
if (i.Value is string || i.Value is int)
{
tvItem.Items.Add(new TreeViewItem { Header = i.Key + " : " + i.Value });
}
else if (i.Value is List<string>)
{
arrProperties = new StringBuilder();
arrProperties.Append(" [ ");
foreach (string item in (List<string>)i.Value)
{
arrProperties.Append(item + ", ");
}
arrProperties.Remove(arrProperties.Length - 2, 2);
arrProperties.Append(" ]");
tvItem.Items.Add(new TreeViewItem { Header = i.Key + " : " + arrProperties.ToString() });
}
}
ptvItem.Items.Add(tvItem);
ptvItem = tvItem;
}
trvQueryPlan.Items.Add(ptvItem);