可能这可能是一个非常基本的问题,但我正在研究一个小例子项目以供我理解,我需要一些帮助来完成这个。
public class XMlExample : INotifyPropertyChanged
{
[XmlElement("ID")]
public string ID { get; set; } //Textbox
[XmlAttribute("Initial")]
public string Initial { get; set; } //Textbox
public event PropertyChangedEventHandler PropertyChanged;
}
public class Details //Datagrid
{
[XmlElement("FirstName")]
public string FirstName { get; set; }
[XmlElement("LastName")]
public string LastName { get; set; }
}
这是未完成的功能:
读写功能: Button1读取XML文件:
XmlSerializer deserializer = new XmlSerializer(typeof(XMlExample));
TextReader textReader = new StreamReader(@"C:\test\testserialization.xml");
XMlExample xmlexmaple;
xmlexmaple = (XMlExample)deserializer.Deserialize(textReader);
textReader.Close();
按钮2写入XML文件:
XmlSerializer serializer = new XmlSerializer(typeof(XMlExample));
TextWriter textWriter = new StreamWriter(@"C:\test\testserialization.xml");
serializer.Serialize(textWriter, XXXX);
textWriter.Close();
请有人帮助我,我如何从textbox和datagrid获取值作为xml文件写入,如何将其读回界面。谢谢。
答案 0 :(得分:1)
要序列化/反序列化Datagrid
,您可以在XMLExample
类中为其添加属性,并将Serializable
属性添加到这两个类中。
[Serializable]
public class XMLExample : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public XMLExample()
{
ID = "Spaghetti";
Initial = "Linguini";
Details = new List<Detail>();
}
public string ID { get; set; } // Textbox
public string Initial { get; set; } // Textbox
public List<Detail> Details { get; set; } // Datagrid
}
[Serializable]
public class Detail
{
public Detail()
{
// default values, if appropriate.
FirstName = "John";
LastName = "Shaw";
}
[XmlElement("FirstName")]
public string FirstName { get; set; }
[XmlElement("LastName")]
public string LastName { get; set; }
}
反序列化后,在Button1
处理程序中,您可以适当地填充用户界面控件。在序列化类之前,在Button2
处理程序中,您需要适当地填充类中的属性。
XmlSerializer _serializer = new XmlSerializer(typeof(XMLExample));
XMLExample _example = new XMLExample();
// Read file.
using (TextReader textReader = new StreamReader(@"C:\test\testserialization.xml"))
{
_example = (XMLExample)_serializer.Deserialize(textReader);
textReader.Close();
}
// Populate user interface from the class.
textBox1.Text = _example.ID;
textBox2.Text = _example.Initial;
// etc...
// Update class from user interface
_example.Details.Add(new Detail() { FirstName = "John", LastName = "Doe" });
_example.Details.Add(new Detail() { FirstName = "Jane", LastName = "Doe" });
// Write file.
using (TextWriter textWriter = new StreamWriter(@"C:\test\testserialization.xml"))
{
_serializer.Serialize(textWriter, _example);
textWriter.Close();
}
<?xml version="1.0" encoding="utf-8"?>
<XMLExample xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<ID>Spaghetti</ID>
<Initial>Linguini</Initial>
<Details>
<Detail>
<FirstName>John</FirstName>
<LastName>Doe</LastName>
</Detail>
<Detail>
<FirstName>Jane</FirstName>
<LastName>Doe</LastName>
</Detail>
</Details>
</XMLExample>