.Net C#将treeView保存到文件的最佳方法?

.Net C#将treeView保存到文件的最佳方法?,c#,visual-studio,treeview,C#,Visual Studio,Treeview,我正在使用Visual Studio 2013和C#。我正在动态创建一个树视图,并使用添加和删除按钮来创建树 我想知道什么是将treeView节点保存到文件的好方法,以便下次启动应用程序时可以再次动态构建它 我应该使用.ini文件吗。xml?我想看看如何做到这一点的例子。举个小例子就可以了 谢谢…您可以使用这两种格式来存储数据。无论格式如何,都需要定义一个类,该类的Id表示每个节点,parentId对于根元素可以为null。然后设置元素列表,然后序列化这些元素。序列化对象可以保存为Xml,也可以

我正在使用Visual Studio 2013和C#。我正在动态创建一个树视图,并使用添加和删除按钮来创建树

我想知道什么是将treeView节点保存到文件的好方法,以便下次启动应用程序时可以再次动态构建它

我应该使用.ini文件吗。xml?我想看看如何做到这一点的例子。举个小例子就可以了


谢谢…

您可以使用这两种格式来存储数据。无论格式如何,都需要定义一个类,该类的Id表示每个节点,parentId对于根元素可以为null。然后设置元素列表,然后序列化这些元素。序列化对象可以保存为Xml,也可以解析为任何其他格式(如Json),甚至可以是自定义格式(如ini文件)

编辑1 这是一个示例实现。数据结构不是有效的树,但它提供了一个透视图。也许你可以读更多关于树木的书

使用系统;
使用System.Collections.Generic;
使用System.IO;
使用System.Linq;
使用System.Xml.Serialization;
命名空间控制台应用程序1
{
公共静态类程序
{
私有静态void Main()
{
//定义初始树节点。
变量树=新列表
{
新树烯
{
Id=1,
ParentId=null,
Text=“根元素1”
},
新树烯
{
Id=2,
ParentId=null,
Text=“根元素2”
},
新树烯
{
Id=3,
ParentId=1,
Text=“子元素1”
},
新树烯
{
Id=4,
ParentId=3,
Text=“孙子元素1”
}
};
//初始化序列化程序实例。
var xmlSerializer=新的xmlSerializer(tree.GetType());
//序列化列表。(保存到Xml文件中)
使用(var fileStream=File.OpenWrite(“SerializerTest.xml”))
{
序列化(文件流,树);
}
//将存储的Xml文件反序列化为新的树对象。
使用(var fileStream=File.OpenRead(“SerializerTest.xml”))
{
var loadedTree=xmlSerializer.Deserialize(fileStream)为列表;
如果(loadedTree!=null)
{
foreach(loadedTree.Where(x=>x.ParentId==null.ToList()中的var节点)
{
PrintNode(loadedTree,节点);
}
}
}
Console.ReadLine();
}
私有静态void打印节点(列表树、树节点)
{
WriteLine(“Id:{0}-Text:{1}”,node.Id,node.Text);
var children=tree.Where(x=>x.ParentId==node.Id).ToList();
foreach(儿童中的儿童变量)
{
PrintNode(树,子节点);
}
}
}
[可序列化]
公共级树节点
{
公共int Id{get;set;}
public int?ParentId{get;set;}
公共字符串文本{get;set;}
}
}

我会选择XML。。。或者可能是JSONXML,试试这个谢谢你的回答…我如何创建.xml文件作为保存任务?这些链接向我展示了如何加载.xml文件并构建treeView,但是如何保存treeView以获取.xml文件呢?
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Xml.Serialization;

namespace ConsoleApplication1
{
    public static class Program
    {
        private static void Main()
        {
            // Define your initial tree nodes.
            var tree = new List<TreeNode>
            {
                new TreeNode
                {
                    Id = 1,
                    ParentId = null,
                    Text = "Root Element 1"
                },
                new TreeNode
                {
                    Id = 2,
                    ParentId = null,
                    Text = "Root Element 2"
                },
                new TreeNode
                {
                    Id = 3,
                    ParentId = 1,
                    Text = "Child Element 1"
                },
                new TreeNode
                {
                    Id = 4,
                    ParentId = 3,
                    Text = "Grandchild Element 1"
                }
            };

            // Initialize serializer instance.
            var xmlSerializer = new XmlSerializer(tree.GetType());

            // Serialize your list. (Save into Xml File)
            using (var fileStream = File.OpenWrite("SerializerTest.xml"))
            {
                xmlSerializer.Serialize(fileStream, tree);
            }

            // Deserialize your stored Xml file into a new tree object.
            using (var fileStream = File.OpenRead("SerializerTest.xml"))
            {
                var loadedTree = xmlSerializer.Deserialize(fileStream) as List<TreeNode>;
                if (loadedTree != null)
                {
                    foreach (var node in loadedTree.Where(x => x.ParentId == null).ToList())
                    {
                        PrintNode(loadedTree, node);
                    }
                }
            }

            Console.ReadLine();
        }

        private static void PrintNode(List<TreeNode> tree, TreeNode node)
        {
            Console.WriteLine("Id: {0} - Text: {1}", node.Id, node.Text);
            var children = tree.Where(x => x.ParentId == node.Id).ToList();
            foreach (var child in children)
            {
                PrintNode(tree, child);
            }
        }
    }

    [Serializable]
    public class TreeNode
    {
        public int Id { get; set; }
        public int? ParentId { get; set; }
        public string Text { get; set; }
    }
}