C# Json绑定winform Treeview控件补充

根据以下内容做扩展 兼容value为数组时的报错情况(3条消息) WinFrom Json数据绑定TreeView控件核心代码_CatchMe_439的博客-CSDN博客_json treeview

 string json = string.Empty;
                public void ConvertJson()
                {
                        string filepath = "..\\Debug\\Jsonfiles\\示例文件.json";

                        using (FileStream fs = new FileStream(filepath, FileMode.OpenOrCreate, System.IO.FileAccess.ReadWrite, FileShare.ReadWrite))
                        {
                                using (StreamReader sr = new StreamReader(fs, Encoding.UTF8))
                                {
                                        json = sr.ReadToEnd();
                                }
                        }
                        BindTreeView(json);
                }

                public void BindTreeView(string strJson)
                {
                        treeView.Nodes.Clear();//清空Node

                        if (IsJOjbect(strJson))
                        {
                                JObject jo = (JObject)JsonConvert.DeserializeObject(strJson);
                                foreach (var joitem in jo)
                                {
                                        TreeNode jotree;
                                        if (joitem.Value.GetType() == typeof(JObject))
                                        {
                                                jotree = new TreeNode(joitem.Key);
                                                AddTreeChildNode(ref jotree, joitem.Value.ToString());
                                                treeView.Nodes.Add(jotree);
                                        }
                                        else if (joitem.Value.GetType() == typeof(JArray))
                                        {
                                                
                                                if (IsVarArray(joitem.Value.ToString()))
                                                {
                                                        jotree = new TreeNode(joitem.Key);
                                                        AddTreeChildNode(ref jotree, joitem.Value.ToString());
                                                        treeView.Nodes.Add(jotree);
                                                }
                                                else
                                                {
                                                        jotree = new TreeNode(joitem.Key + ":" + joitem.Value.ToString());
                                                        treeView.Nodes.Add(jotree);
                                                }
                                                
                                        }
                                        else if (joitem.Value.GetType() == typeof(JValue))
                                        {
                                                jotree = new TreeNode(joitem.Key + ":" + joitem.Value.ToString());
                                                treeView.Nodes.Add(jotree);
                                        }
                                        else
                                        {
                                                jotree = new TreeNode(joitem.Key + ":" + joitem.Value.ToString());
                                                treeView.Nodes.Add(jotree);
                                        }
                                }
                        }
                        if (IsJArray(strJson))
                        {

                                JArray ja = (JArray)JsonConvert.DeserializeObject(strJson);
                                foreach (JObject items in ja)
                                {
                                        TreeNode tree = new TreeNode();
                                        foreach (var jaitem in items)
                                        {
                                                TreeNode jatree;
                                                if (jaitem.Value.GetType() == typeof(JObject))
                                                {
                                                        jatree = new TreeNode(jaitem.Key);
                                                        AddTreeChildNode(ref jatree, jaitem.Value.ToString());
                                                        tree.Nodes.Add(jatree);

                                                }
                                                else if (jaitem.Value.GetType() == typeof(JArray))
                                                {
                                                        if (IsVarArray(jaitem.Value.ToString()))
                                                        {
                                                                jatree = new TreeNode(jaitem.Key);
                                                                AddTreeChildNode(ref jatree, jaitem.Value.ToString());
                                                                tree.Nodes.Add(jatree);
                                                        }
                                                        else
                                                        {
                                                                jatree = new TreeNode(jaitem.Key + ":" + jaitem.Value.ToString());
                                                                tree.Nodes.Add(jatree);
                                                        }
                                                }
                                                else if (jaitem.Value.GetType() == typeof(JValue))
                                                {
                                                        jatree = new TreeNode(jaitem.Key + ":" + jaitem.Value.ToString());
                                                        tree.Nodes.Add(jatree);
                                                }
                                                else
                                                {
                                                        jatree = new TreeNode(jaitem.Key + ":" + jaitem.Value.ToString());
                                                        tree.Nodes.Add(jatree);
                                                }
                                        }
                                        treeView.Nodes.Add(tree);
                                }
                        }
                        treeView.ExpandAll();
                }

                public void AddTreeChildNode(ref TreeNode parantNode, string value)
                {
                        if (IsJOjbect(value))
                        {
                                JObject jo = (JObject)JsonConvert.DeserializeObject(value);
                                foreach (var joitem in jo)
                                {
                                        TreeNode jotree;
                                        if (joitem.Value.GetType() == typeof(JObject))
                                        {
                                                jotree = new TreeNode(joitem.Key);
                                                AddTreeChildNode(ref jotree, joitem.Value.ToString());
                                                parantNode.Nodes.Add(jotree);
                                        }
                                        else if (joitem.Value.GetType() == typeof(JArray))
                                        {
                                                if (IsVarArray(joitem.Value.ToString()))
                                                {
                                                        jotree = new TreeNode(joitem.Key);
                                                        AddTreeChildNode(ref jotree, joitem.Value.ToString());
                                                        parantNode.Nodes.Add(jotree);
                                                }
                                                else
                                                {
                                                        jotree = new TreeNode(joitem.Key + ":" + joitem.Value.ToString());
                                                        parantNode.Nodes.Add(jotree);
                                                }
                                        }
                                        else
                                        {
                                                jotree = new TreeNode(joitem.Key + ":" + joitem.Value.ToString());
                                                parantNode.Nodes.Add(jotree);
                                        }
                                }
                        }
                        if (IsJArray(value))
                        {

                                JArray ja = (JArray)JsonConvert.DeserializeObject(value);
                                foreach (JObject item in ja)
                                {
                                        TreeNode tree = new TreeNode();
                                        parantNode.Nodes.Add(tree);
                                        foreach (var jaitem in item)
                                        {
                                                TreeNode jatree;
                                                if (jaitem.Value.GetType() == typeof(JObject))
                                                {
                                                        jatree = new TreeNode(jaitem.Key);
                                                        AddTreeChildNode(ref jatree, jaitem.Value.ToString());
                                                        tree.Nodes.Add(jatree);

                                                }
                                                else if (jaitem.Value.GetType() == typeof(JArray))
                                                {
                                                        jatree = new TreeNode(jaitem.Key);
                                                        AddTreeChildNode(ref jatree, jaitem.Value.ToString());
                                                        tree.Nodes.Add(jatree);
                                                }
                                                else
                                                {
                                                        jatree = new TreeNode(jaitem.Key + ":" + jaitem.Value.ToString());
                                                        tree.Nodes.Add(jatree);
                                                }
                                        }
                                }
                                
                        }

                }

                public bool IsJOjbect(string value)
                {
                        try
                        {
                                JObject ja = JObject.Parse(value);
                                return true;
                        }
                        catch (Exception )
                        {
                                return false;
                        }
                }

                public bool IsJArray(string value)
                {
                        try
                        {
                                JArray ja = JArray.Parse(value);
                                return true;
                                
                        }
                        catch (Exception )
                        {
                                return false;
                        }
                }

                public bool IsVarArray(string value)
                {
                        try
                        {
                                bool a = true;
                                JArray ja = JArray.Parse(value);
                                foreach (var item in ja)
                                {
                                        if (item.GetType() != typeof(JObject))
                                        {
                                                a = false;
                                                break;
                                        }
                                }
                                return a;
                        }
                        catch (Exception)
                        {
                                return false;
                        }
                }
 

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WinForm中的TreeView控件是一个用于显示层次结构数据的控件,通常用于创建树形菜单或文件资源管理器等应用程序。它允许用户展开和折叠节点,并可以通过选择节点来执行相应的操作。 以下是一个简单的示例,演示如何使用WinForm中的TreeView控件: ```csharp using System; using System.Windows.Forms; namespace TreeViewDemo { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { // 添加根节点 TreeNode rootNode = new TreeNode("根节点"); treeView1.Nodes.Add(rootNode); // 添加子节点 TreeNode childNode1 = new TreeNode("子节点1"); TreeNode childNode2 = new TreeNode("子节点2"); rootNode.Nodes.Add(childNode1); rootNode.Nodes.Add(childNode2); // 添加子节点的子节点 TreeNode grandChildNode1 = new TreeNode("子节点1的子节点1"); TreeNode grandChildNode2 = new TreeNode("子节点1的子节点2"); childNode1.Nodes.Add(grandChildNode1); childNode1.Nodes.Add(grandChildNode2); } private void treeView1_AfterSelect(object sender, TreeViewEventArgs e) { // 在选中节点后执行的操作 MessageBox.Show("选中节点:" + e.Node.Text); } } } ``` 在上述示例中,我们创建了一个名为"根节点"的根节点,并添加了两个子节点"子节点1"和"子节点2"。"子节点1"又有两个子节点"子节点1的子节点1"和"子节点1的子节点2"。当用户选择某个节点时,会弹出一个消息框显示选中的节点文本。 请注意,上述示例是一个简单的演示,你可以根据自己的需求进行更复杂的操作和定制化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值