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 响应中制作动态部分标题

如何将 JSON 数据格式化为动态生成对象属性的 C# 对象

创建从 C# 到 JavaScript 的动态 JSON

如何从这个长的 json 文件中获取价值,它会在新交易后自行增加,我需要最新的交易

从 C# 中的文件反序列化 Json

如何使用 MongoDB 将动态 JSON 属性发布到 C# ASP.Net Core Web API?