您的位置:首页 > 其它

【最佳实践系列】基于序列化技术的XML数据源操作模式

2015-11-15 13:59 831 查看
假定应用程序的输入数据来自于一个结构化的XML文件,那么首先我们要根据需要的数据格式设计类型(class),其中要求类型中的公共属性能够被XML序列化,例如Dictionary<T,T>类型就不能直接被序列化而List<T>则能够。保存数据时,直接将类型实例序列化到外部XML文件中即可;读取时则反序列化,这样能够简化XML文件的读写逻辑,有利于应用程序的快速实现。举例如下:

下面的例子需要引用using System.IO和using System.Xml.Serialization命名空间。

1、设计类型:两个表示学生信息的简单类

/// <summary>
/// 一个学生信息类
/// </summary>
//无需[Serializable]特性声明
public class Student
{
public string Id { get; set; }
public string Name { get; set; }
public List<double> Scores { get; set; }
public Student()
{
Id = string.Empty;
Name = string.Empty;
Scores = new List<double>();
}
}
/// <summary>
/// 某个班级的学生信息类
/// </summary>
public class ClassStudents
{
public string Class { get; set; }
public List<Student> Students { get; set; }
public ClassStudents()
{
Class = string.Empty;
Students = new List<Student>();
}
}

2、XML文件的读写
private void Button_Click_1(object sender, RoutedEventArgs e)
{
Student s1 = new Student() { Id = "101", Name = "李明" };
s1.Scores.Add(85);
s1.Scores.Add(90);
Student s2 = new Student() { Id = "102", Name = "张燕" };

ClassStudents students = new ClassStudents() { Class = "三年一班" };
students.Students.Add(s1);
students.Students.Add(s2);

//序列化XML
XmlSerializer xSer = new XmlSerializer(typeof(ClassStudents)); //创建序列化对象
using (FileStream fs = new FileStream("data.xml", FileMode.Create))
{
xSer.Serialize(fs, students); //将对象序列化到xml文件
}

//反序列化
using (FileStream fs = new FileStream("data.xml", FileMode.Open))
{
var sts = xSer.Deserialize(fs); //将xml文件反序列化到对象(ClassStudents类型)
}
}

3、XML文件
<?xml version="1.0"?>
<ClassStudents xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Class>三年一班</Class>
<Students>
<Student>
<Id>101</Id>
<Name>李明</Name>
<Scores>
<double>85</double>
<double>90</double>
</Scores>
</Student>
<Student>
<Id>102</Id>
<Name>张燕</Name>
<Scores />
</Student>
</Students>
</ClassStudents>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: