C#如何从json文件动态地制作treeview
Posted
技术标签:
【中文标题】C#如何从json文件动态地制作treeview【英文标题】:C# how to dynamicaly make treeview from json file 【发布时间】:2020-01-17 13:56:29 【问题描述】:我正在尝试在带有 c# 的 winform 中使用树形视图,以允许为少量应用程序选择数据中心中的服务器。我使用以下 .json 作为应用程序清单的本地存储硬编码文件。
"App1":
"DataCenter1": [ "DC1_serverA", "DC1_serverB", "DC1_serverC" ],
"DataCenter2": [ "DC2_serverX", "DC2_serverY", "DC2_serverZ" ]
,
"App2":
"DataCenter1": [ "DC1_serverQ", "DC1_serverR", "DC1_serverT" ],
"CDC2": [ "DC2_serverM", "DC2_serverN", "DC2_serverP" ]
我正在使用 c# 来遍历这个 json 以动态创建树视图,以允许用户选择他们想要的应用程序/数据中心/服务器。我的高级代码,我无法计算提取数据的叶级逻辑是这样的:
dynamic dynJson = JsonConvert.DeserializeObject(File.ReadAllText(@"servers.json"));
foreach (var item in dynJson)
TreeNode treeNodeCI = new TreeNode(item);
treCIListing.Nodes.Add(treeNodeCI);
我似乎使用了错误的句柄来获取 json 中的项目。我可以在 c# 中编辑 .json 文件格式,使其更适合和更容易将数据转换为可选项目的 UI,如附上这张图片。
【问题讨论】:
【参考方案1】:我建议你递归地去 ex.
private void FillTree(TreeNode parentNode, IEnumerable dynJson)
foreach (var item in dynJson)
TreeNode treeNodeCI = new TreeNode(item);
FillTree(treeNodeCI, item);
parentNode.Nodes.Add(treeNodeCI);
那么初始调用应该是这样的:
dynamic dynJson = JsonConvert.DeserializeObject(File.ReadAllText(@"servers.json"));
FillTree(treCIListing, dynJson);
您可以比我更具体地处理类型,我使用的是 IEnumerable 和 TreeNode,但您可以使用您的具体类型
【讨论】:
这几乎就是我正在做的事情,但该项目不是应该添加以获得预期结果的项目。 c# 无法添加项目,因为添加节点的语法已关闭。以上是关于C#如何从json文件动态地制作treeview的主要内容,如果未能解决你的问题,请参考以下文章
如何将 JSON 数据格式化为动态生成对象属性的 C# 对象