C# 列表XML序列化

C# 列表XML序列化,c#,xml,list,serialization,C#,Xml,List,Serialization,我创建一个列表,用户在其中创建一个对象,该对象将被添加到列表中 private List<Tool> toolList = new List<Tool>(); private void buttonAdd_Click(object sender, RoutedEventArgs e) { InputDialog input = new InputDialog(); input.ShowDialog(); input

我创建一个列表,用户在其中创建一个对象,该对象将被添加到列表中

private List<Tool> toolList = new List<Tool>();

private void buttonAdd_Click(object sender, RoutedEventArgs e)
    {
        InputDialog input = new InputDialog();
        input.ShowDialog();
        inputNewTool = input.enteredTxt;

        if (inputNewTool != null)
        {
            System.Windows.Forms.MessageBox.Show("Chose the Tool's directory");
            dlg.DefaultExt = ".exe";
            dlg.Filter = "Application (.exe)|*.exe";

            if (dlg.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                Tool tool = new Tool();
                tool.Name = inputNewTool;
                tool.Path = dlg.FileName;
                toolList.Add(tool);
                comboBoxTools.Items.Add(tool.Name);
            }
        }
如果用户创建多个对象,则它们将在列表中。我核实过了。应序列化这些对象:

    private void Window_Closed(object sender, EventArgs e)
    {
        foreach (Tool t in toolList)
        {
            XmlSerializer serializer = new XmlSerializer(t.GetType(), new 
            XmlRootAttribute("Tools"));
            using (var writer = new StreamWriter(@Start.userConfigurePath + 
            "\\config.xml")) 
            {
                serializer.Serialize(writer.BaseStream, t);
                writer.Close();
            }
        }
    }
<?xml version="1.0"?>
<Tool xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
 xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Name>zest6</Name>
<Path>C:\Program Files\FreePDF_XP\fpsetup.exe</Path>
</Tool>
无论XML文件列表中有多少对象,都只是最后一个序列化的对象:

    private void Window_Closed(object sender, EventArgs e)
    {
        foreach (Tool t in toolList)
        {
            XmlSerializer serializer = new XmlSerializer(t.GetType(), new 
            XmlRootAttribute("Tools"));
            using (var writer = new StreamWriter(@Start.userConfigurePath + 
            "\\config.xml")) 
            {
                serializer.Serialize(writer.BaseStream, t);
                writer.Close();
            }
        }
    }
<?xml version="1.0"?>
<Tool xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
 xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Name>zest6</Name>
<Path>C:\Program Files\FreePDF_XP\fpsetup.exe</Path>
</Tool>

热情
C:\Program Files\FreePDF\u XP\fpsetup.exe

为什么最后序列化的对象会覆盖其他对象?

序列化
工具列表
而不是
t
。顺便说一句:没有理由使用
writer.BaseStream
,只需使用
writer
也可以在你的中看到John Saunders的答案,你在那里写的我猜是这样的:)你是对的。我不知道如何序列化一个完整的列表。有时候,很明显,理解“对不起”