【问题标题】:C# how to dynamicaly make treeview from json fileC#如何从json文件动态地制作treeview
【发布时间】: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,如附上这张图片。

【问题讨论】:

    标签: c# json winforms treeview


    【解决方案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# 无法添加项目,因为添加节点的语法已关闭。
    猜你喜欢
    • 1970-01-01
    • 2012-02-01
    • 1970-01-01
    • 2019-07-25
    • 1970-01-01
    • 2020-08-19
    • 1970-01-01
    • 2019-02-12
    • 1970-01-01
    相关资源
    最近更新 更多