C# Windows窗体XML序列化保存对话框

C# Windows窗体XML序列化保存对话框,c#,xml,windows,forms,streamwriter,C#,Xml,Windows,Forms,Streamwriter,我被这个愚蠢的表格困住了。。。这是我的密码。它将它保存在streamwriter希望保存的地方,但当我通过save对话框将它保存在用户希望保存的地方时,会创建XML,但不会在其中放入任何内容!有人可以看一下,因为它开始让我发狂了 void SavebuttonClick(object sender, EventArgs e) { Stream myStream ; SaveFileDialog savefile1 = new SaveFileDialog(); save

我被这个愚蠢的表格困住了。。。这是我的密码。它将它保存在streamwriter希望保存的地方,但当我通过save对话框将它保存在用户希望保存的地方时,会创建XML,但不会在其中放入任何内容!有人可以看一下,因为它开始让我发狂了

void SavebuttonClick(object sender, EventArgs e)
{
    Stream myStream ;
    SaveFileDialog savefile1 = new SaveFileDialog();

    savefile1.Filter = "xml files |*.xml"  ;
    savefile1.FilterIndex = 2 ;
    savefile1.RestoreDirectory = true ;

    if(savefile1.ShowDialog() == DialogResult.OK)
    {
        if((myStream = savefile1.OpenFile()) != null)
        {
            Values v = new Values();
            v.task1_name = this.task1_name.Text;
            v.task1_desc = this.task1_desc.Text;
            v.task1_date = this.task1_date.Value;
            v.task1_time = this.task1_time.Value;
            SaveValues(v);
        }
        myStream.Close();   
    }
}
这是streamwriter

public void SaveValues(Values v)
{
    XmlSerializer serializer = new XmlSerializer(typeof(Values));
    using(TextWriter textWriter = new StreamWriter(@"E:\TheFileYouWantToStore.xml"))
    {
        serializer.Serialize(textWriter, v);
    }
...
}
编辑:

我想这就是你所说的代码,虽然mate:

你必须调用textWriter.close;在序列化之后。如果不关闭writer,它将不会对文件应用chenges。 顺便说一下,您正在将值写入E:\TheFileYouWantToStore.xml。您的保存方法不使用用户文件

public void SaveValues(Values v)
{
    XmlSerializer serializer = new XmlSerializer(typeof(Values));
    using(TextWriter textWriter = new StreamWriter(@"E:\TheFileYouWantToStore.xml"))
    {
        serializer.Serialize(textWriter, v);
        textWriter.close();
    }
...
}
编辑:

-


您能试试XmlWriter=XmlWriter吗。Create@E:\t文件youwanttostore.xml?并发布价值观课程。编辑了我的原始帖子,谢谢!对该文件所做的所有编辑只是将XML更改为一行文本,而不是一个格式良好的文件。这是一个基本错误,SaveValues方法需要一个额外的参数,以便您可以传递myStream。我不确定如何添加这个额外的参数?你得原谅我,我是新来的。非常感谢。如何将保存方法添加到我的用户文件?我实际上不想要streamwriter文件。。。谢谢你!您只需将文件名传递给SaveValues文件名,我就编辑了代码。当我使用此代码时,它表示另一个程序正在使用它。。。我想我错过了一个收盘;某处…我找不到它--让我很紧张,你能再帮我一次吗?请确保保存文件未被使用或已经存在。
public void SaveValues(Values v)
{
    XmlSerializer serializer = new XmlSerializer(typeof(Values));
    using(TextWriter textWriter = new StreamWriter(@"E:\TheFileYouWantToStore.xml"))
    {
        serializer.Serialize(textWriter, v);
        textWriter.close();
    }
...
}
if(savefile1.ShowDialog() == DialogResult.OK)
{
        Values v = new Values();
        v.task1_name = this.task1_name.Text;
        v.task1_desc = this.task1_desc.Text;
        v.task1_date = this.task1_date.Value;
        v.task1_time = this.task1_time.Value;
        SaveValues(savefile1.FileName, v);
}
public void SaveValues(string fileName, Values v)
{
    XmlSerializer serializer = new XmlSerializer(typeof(Values));
    using(TextWriter textWriter = new StreamWriter(fileName))
    {
        serializer.Serialize(textWriter, v);
        textWriter.close();
    }
...
}