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

本文关键字:Windows 窗体 XML 反序列化 | 更新日期: 2023-09-27 18:32:44

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

我想知道如何将其"加载"(最好是询问用户文件在哪里)将其重新加载到我的表单中,以便可以对其进行编辑并再次保存。

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 反序列化为 C# Windows 窗体

你可以这样做:

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 反序列化为一个对象,并使用该对象重新加载字段。

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

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

XmlTextReader reader = new XmlTextReader ("books.xml");
while (reader.Read()) 
{
    // code
}