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

时间:2012-04-29 17:42:23

标签: 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;}
    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);
    }
}

3 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

你可以这样做:

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代价很高)

希望有所帮助