反序列化文件到对象
序列化:C#对象 → XML文件保存到磁盘
反序列化:读取磁盘上的XML文件 → 还原成C#对象
生成出来的person.xml内容示例:
<?xml version="1.0"?>
<Person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Name>Mathieu</Name>
</Person>Code language: HTML, XML (xml)
两种读取方式
1:直接用FileStream读取文件
using System;
using System.IO;
using System.Xml.Serialization;
// 从本地xml文件反序列化得到Person对象
private Person LoadPersonFromXmlFile()
{
// 获取APP私有存储目录
string folder = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal);
string filePath = Path.Combine(folder, "person.xml");
// 文件不存在直接返回null
if (!File.Exists(filePath))
{
return null;
}
using (FileStream fs = new FileStream(filePath, FileMode.Open))
{
XmlSerializer serializer = new XmlSerializer(typeof(Person));
// Deserialize直接传入文件流,还原对象
Person person = serializer.Deserialize(fs) as Person;
return person;
}
}Code language: JavaScript (javascript)
2:先读入MemoryStream
private Person LoadPersonByMemoryStream()
{
string folder = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal);
string filePath = Path.Combine(folder, "person.xml");
if (!File.Exists(filePath)) return null;
byte[] fileBytes = File.ReadAllBytes(filePath);
using (MemoryStream ms = new MemoryStream(fileBytes))
{
XmlSerializer mySerializer = new XmlSerializer(typeof(Person));
Person deserializeObj = (Person)mySerializer.Deserialize(ms);
Console.WriteLine(deserializeObj.Name);
return deserializeObj;
}
}Code language: JavaScript (javascript)
示例
private void BtnLoad_Click(object sender, EventArgs e)
{
Person p = LoadPersonFromXmlFile();
if(p != null)
{
Console.WriteLine("读取到名字:" + p.Name);
}
else
{
Console.WriteLine("文件不存在");
}
}Code language: JavaScript (javascript)
Previous: 序列化对象到文件
Next: SQLite数据库的使用