使用文档进行数据保存
问题
-
当对象属性发生变化时,需要增加或减少信息的写入和读取次数
-
信息的安全性较差
序列化和反序列化
注意:
-
只要是对象皆可进行序列化和反序列化操作
-
如果某个数据对象要进行序列化和反序列化操作,首先要将这个对象进行添加特性-序列化标识
对象数据进行序列化保存
private void btnSavesl_Click(object sender, EventArgs e)
{
//首先数据封装
objStudent student = new objStudent()
{
ID = int.Parse(txtID.Text.Trim()),
Name = txtName.Text.Trim(),
Age = int.Parse(txtAge.Text.Trim()),
Birthday = txtBirthday.Text.Trim()
};
//【1】创建文件流
FileStream fs = new FileStream("Student.stu",FileMode.Create);
//【2】创建二进制格式化器
BinaryFormatter formatter = new BinaryFormatter();
//【3】调用这个格式化器的序列化方法
formatter.Serialize(fs,student);
fs.Close();
}
对象数据反序列化读取
private void btnReadersl_Click(object sender, EventArgs e)
{
//【1】创建文件流
FileStream fs = new FileStream("Student.stu", FileMode.Open);
//【2】创建二进制格式化器
BinaryFormatter formatter = new BinaryFormatter();
//【3】调用反序列化方法
objStudent student=(objStudent)formatter.Deserialize(fs);
fs.Close();
txtID.Text = student.ID.ToString();
txtName.Text = student.Name;
txtAge.Text = student.Age.ToString();
txtBirthday.Text = student.Birthday;
}
应用场合
-
应用程序配置信息(如果信息量较大,则使用该方法更方便读取和写入)
-
不需要数据库的时候,可以作为数据存取的载体
-
WebServerice等服务中对象的传递
-
模块之间的数据传递
好处
-
对象数据的存取更方便,扩展性强
-
数据安全性更强
XML文件的操作
XML概念
-
eXtensible Markup Language的缩写,可扩展标记语言
-
是一种可以用来创建自定义的标记语言,由万维网协会(W3C)创建,用来克服HTML的局限
-
从使用功能上看XML主要用于数据的存储,而HTML主要用于数据显示
XML文档格式要求
-
确定且唯一的根元素
-
开始标签和结束标签匹配
-
元素标签的正确嵌套
-
属性值要用引号括起来
-
同一个元素的属性不能重复
语法要求:
-
元素:<标签>文本内容</标签>
-
处理指令:< ?xml version="1.0"?>
-
注释:< !-- 注释内容 -->
-
属性:< zhangsan currentMoney="ZH¥">200< /zhangsan>
XML文件读取
XML文件的读取
-
创建文档对象
-
加载xml文档
-
获取根节点
-
遍历节点并封装数据
private void btnLoadXML_Click(object sender, EventArgs e)
{
XmlDocument document = new XmlDocument();
document.Load("XMLFile.xml");
XmlNode root = document.DocumentElement;
List<Book> books = new List<Book>();
foreach (XmlNode item in root.ChildNodes)
{
if (item.Name=="Book")
{
Book book = new Book();
foreach (XmlNode node in item.ChildNodes)
{
switch (node.Name)
{
case "Name":
book.Name = node.InnerText;
break;
case "Author":
book.Author = node.InnerText;
break;
case "Price":
book.Price = node.InnerText;
break;
default:
break;
}
}
books.Add(book);
}
}
dataGridView1.DataSource = books;
}
常用对象
-
XmlDocument对象表示XML整个文档
-
XmlNode对象表示XML文件中的单个节点
常用属性/方法
XmlDocument:
-
DocumentElement:获取根节点
-
ChildNodes:获取其内部所有子节点
-
Load():读取整个XML结构
-
Save():保存整个XML文档
XmlNode:
-
InnerText:获取当前节点之间的内容数据
-
Name:当前节点的名字
-
ChildNodes:当前节点的所有子节点
-
AppendChild():向当前节点中添加一个字节点