序列化一些复杂的xml数据
//[Serializable]
public class Person
{
[XmlAttribute]
public string Name;
public string Age;
public string Sex;
}
//[Serializable]
public class Part
{
[XmlArrayAttribute("Persons")]
public Person[] Persons;
}
序列化:
string filename = “test.xml”;
XmlSerializer serializer = new XmlSerializer(typeof(Part));
TextWriter writer = new StreamWriter(filename);
Part pt = new Part();
// Creates Person
Person p1 = new Person();
p1.Name = "liming";
p1.Sex = "male";
p1.Age = "23";
Person p2 = new Person();
p2.Name = "lili";
p2.Sex = "female";
p2.Age = "22";
Person[] Persons = { p1, p2 };
pt.Persons = Persons;
serializer.Serialize(writer, pt);
writer.Close();
反序列化:
string filename = “test.xml”;
using (System.IO.StreamReader reader = new System.IO.StreamReader(filename ))
{
System.Xml.Serialization.XmlSerializer xs = new System.Xml.Serialization.XmlSerializer(typeof(Part));
//处理未知节点
xs.UnknownNode += new XmlNodeEventHandler(xs_UnknownNode);
//处理未知属性
xs.UnknownAttribute += new XmlAttributeEventHandler(xs_UnknownAttribute);
Part part = xs.Deserialize(reader) as Part;
reader.Close();
for (int i = 0; i < part.Persons.Count(); i++ )
{
Person person = part.Persons[i] as Person;
richTextBox1.Text += "Name:" + person.Name + "/n" +
"Age: " + person.Age + "/n" +
"Sex: " + person.Sex + "/n";
}
}
事件处理:
void xs_UnknownAttribute(object sender, XmlAttributeEventArgs e)
{
System.Xml.XmlAttribute attr = e.Attr;
richTextBox1.Text += "Unknown attribute " + attr.Name + "='" + attr.Value + "'";
}
void xs_UnknownNode(object sender, XmlNodeEventArgs e)
{
richTextBox1.Text += "Unknown Node:" + e.Name + "/t" + e.Text;
}