C# 将XML反序列化为C Windows窗体

C# 将XML反序列化为C Windows窗体,c#,xml,windows,winforms,deserialization,C#,Xml,Windows,Winforms,Deserialization,我有一个通过Windows窗体创建的XML文件,用于保存两个文本字段和两个日期时间选择器 我想知道如何更好地通过询问用户文件在哪里加载,将其返回到我的表单中,以便可以再次编辑和保存 public class Values { public string task1_name { get; set;} public string task1_desc { get; set;} public DateTime task1_date { get; set;} publ

我有一个通过Windows窗体创建的XML文件,用于保存两个文本字段和两个日期时间选择器

我想知道如何更好地通过询问用户文件在哪里加载,将其返回到我的表单中,以便可以再次编辑和保存

public class Values 
{
    public string task1_name { get; set;}
    public string task1_desc { get; set;}
    public DateTime task1_date { get; set;}
    public DateTime task1_time { get; set;}
}
“在我的窗体上保存”按钮

void SavebuttonClick(object sender, EventArgs e)
{
    DialogResult dialogResult = MessageBox.Show("Are you sure you want to save?",
        "Save", MessageBoxButtons.YesNo);

    if (dialogResult == DialogResult.Yes)
    {
        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);  
    }
}
第三部分

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

您可以解析xml并使用解析的数据更新表单。VisualStudio中有一个文件选择器对话框,供用户选择文件

XmlTextReader reader = new XmlTextReader ("books.xml");

while (reader.Read()) 
{
    // code
}

您可以将xml反序列化为对象,并使用该对象重新加载字段

首先,使用xsd.exe为该xml创建xsd。。然后,您可以使用相同的exe创建类文件,并使用XmlSerializer将xml反序列化到该对象中。

您可以执行以下操作:

public void SomeMethod()
{
    Values v = LoadValues();
    this.task1_name.Text = v.task1_name;
    this.task1_desc.Text = v.task1_desc;
    this.task1_date.Value = v.task1_date;
    this.task1_time.Value = v.task1_time;
}

public Values LoadValues()
{
    XmlSerializer serializer = new XmlSerializer(typeof(Values));
    using (TextReader textReader = new StreamReader(@"E:\TheFile.xml"))
    {
        return (Values)serializer.Deserialize(textReader);
    }
}
我建议将序列化程序放在一个变量中,这样就不会在每次构造新的XmlSerializer时都创建它


希望有帮助

你能粘贴生成xml的代码吗?在我的原始帖子中完成了:谢谢!请停止在标题中添加解决方案。请这不是一个讨论论坛。我对编码很陌生。我将如何解析数据?谢谢你在文件选择器上的提示!我不明白你的意思;正如我上面的评论,我对编码相当陌生。很抱歉谢谢你的回复!好吧,你可以看看,还有..谢谢,我的代码告诉我textWriter在这个上下文中不存在我已经插入了值v=loadvalues;一部分进入我的按钮代码,另一部分在下面。太棒了!非常感谢。您知道如何让它弹出一个对话框,询问用户从何处加载/保存?我无法控制上面提到的人:我不想听起来粗鲁,但如果是为了回答特定的问题,而不是为了学习,我会说StarkOverflow。你本可以用谷歌搜索的,我知道。。。但是我正在使用XML序列化,而且还不熟悉编码,我不知道我需要做什么。它将其保存为XML文件,但我希望它询问用户将其保存在哪里?我只是假设它会很简单,但对我来说,它看起来不像我之前评论的链接。这真的很容易。