0

ツリービューのツリーノードを保存してロードしようとしましたが、次のようにツリーノードのリストでツリーを作成しました:

  [Serializable]
public class Tree : List<TreeNode>
{
    public void Save()
    {

       System.Xml.Serialization.XmlSerializer x = new System.Xml.Serialization.XmlSerializer(typeof(Tree));
       System.IO.FileStream s = new System.IO.FileStream(Application.StartupPath + "\\nodes.xml", System.IO.FileMode.Create);
        x.Serialize(s, this);
        s.Flush();
        s.Close();
    }

    public static Tree Load()
    {
        System.Xml.Serialization.XmlSerializer x = new System.Xml.Serialization.XmlSerializer(typeof(Tree));
        System.IO.FileStream s = new System.IO.FileStream(Application.StartupPath + "\\nodes.xml", System.IO.FileMode.OpenOrCreate);
        Tree tree = x.Deserialize(s) as Tree;
        s.Close();
        return tree;
    }
}

次に、保存ボタンに次のように書きました。

    private void SaveButton_Click(object sender, EventArgs e)
    {
        this.SaveButton.Enabled = false;
        Tree tree = new Tree();
        foreach (TreeNode treeNode in this.treeView1.Nodes)
        {
            tree.Add(treeNode);
        }
        tree.Save();
        MessageBox.Show("Saved Successfully.", "", MessageBoxButtons.OK, MessageBoxIcon.Information);
        this.SaveButton.Enabled = true;
    }

ロードされたフォームでは、これを使用しました:

private void Form1_Load(object sender, EventArgs e)
    {

        Tree tree = Tree.Load();
        //Process Tree
        foreach (TreeNode node in tree)
        {
            TreeNode treeNode=new TreeNode(node.Text);


            this.treeView1.Nodes.Add(node);

        }
        //End Process Tree

私はそれ以上何もしませんでしたし、nodes.xml が正しくないと思います.xml ファイルを作成したい場合、そこに何を書くべきかわかりません.これを機能させるにはどうすればよいですか? 無効な操作例外エラーがあります

4

1 に答える 1

1

これは、より簡単な方法です。以下のコードは、任意のオブジェクトを XML に変換するためのものです。これを理解したら、必要なときに必要な場所で高度なコードを試してみてください 。ツリービューを xml に変換する方法は?

これは、XML へのシリアライズとオブジェクトの作成方法と、それをデシリアライズする方法の例です。この例がお役に立てば幸いです。

**任意のオブジェクトまたは一部のコレクションを xml オブジェクトに書き込むには、デフォルトのコンストラクターが必要です。

public static string SerializeToXmlString(object objectToSerialize) 
{
    MemoryStream memoryStream = new MemoryStream();
    System.Xml.Serialization.XmlSerializer xmlSerializer = 
        new System.Xml.Serialization.XmlSerializer(objectToSerialize.GetType());
    xmlSerializer.Serialize(memoryStream, objectToSerialize);
    ASCIIEncoding ascii = new ASCIIEncoding();
    return ascii.GetString(memoryStream.ToArray());
}

**そして、これによりxmlがオブジェクトに戻されます

public static object DeSerializeFromXmlString(System.Type typeToDeserialize, string xmlString) 
{
    byte[] bytes = System.Text.Encoding.UTF8.GetBytes(xmlString);
    MemoryStream memoryStream = new MemoryStream(bytes);
    System.Xml.Serialization.XmlSerializer xmlSerializer = 
        new System.Xml.Serialization.XmlSerializer(typeToDeserialize);
    return xmlSerializer.Deserialize(memoryStream);
}
于 2012-08-20T08:09:36.443 に答える