【最佳实践系列】基于序列化技术的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>
下面的例子需要引用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>
相关文章推荐
- Swing中弹出对话框的几种方式_JOptionPane.showMessageDialog等详解
- 基于git hooks的前端代码质量控制解决方案
- 60. MySQLi 扩展拾遗
- postman、postman-rest client 安装
- 【NOIP2015】跳石头 (二分+贪心判定)
- React Flux架构简介
- float
- 【NOIP2015】跳石头 (二分+贪心判定)
- 函数调用和赋值运算
- 一个超级简单MiniBrowser
- jsp Request获取url信息的各种方法比较
- 看懂UML类图和时序图
- C++11新标准:decltype关键字
- JavaScript学习手记2
- 字符串的全排列
- ES规范解读之自增操作符
- static_cast和reinterpret_cast揭秘
- 中文字符集编码Unicode ,gb2312 , cp936 ,GBK,GB18030
- SVN之——eclipse中maven项目交付svn忽略配置文件
- 中文字符集编码Unicode ,gb2312 , cp936 ,GBK,GB18030