最近在整理以前用到的知识,看到XML的读取和存储,用到了序列化和反序列化,可以直接将对象信息存储起来,读取时可以直接实例化对象,开发单机游戏时可以用到,希望对你有所帮助。
1,XMLSaveAndRead.cs文件
using System.IO;
using System.Text;
using System.Xml;
using System.Xml.Serialization;
public class XMLSaveAndRead
{
//将byte数据流转化为string
private string UTF8ByteArrayToString(byte[] characters)
{
UTF8Encoding encoding = new UTF8Encoding();
string constructedString = encoding.GetString(characters);
return (constructedString);
}
//将string转化为byte数据流
private byte[] StringToUTF8ByteArray(string pXmlString)
{
byte[] byteArray = Encoding.UTF8.GetBytes(pXmlString);
return byteArray;
}
// 序列化XML数据
public string SerializeObject<T>(object pObject)
{
string XmlizedString = null;
MemoryStream memoryStream = new MemoryStream();
XmlSerializer xs = new XmlSerializer(typeof(T));
XmlTextWriter xmlTextWriter = new XmlTextWriter(memoryStream, Encoding.UTF8);
xs.Serialize(xmlTextWriter, pObject);
memoryStream = (MemoryStream)xmlTextWriter.BaseStream;
XmlizedString = UTF8ByteArrayToString(memoryStream.ToArray());
return XmlizedString;
}
// 反序列化XML数据
public object DeserializeObject<T>(string pXmlizedString)
{
XmlSerializer xs = new XmlSerializer(typeof(T));
MemoryStream memoryStream = new MemoryStream(StringToUTF8ByteArray(pXmlizedString));
XmlTextWriter xmlTextWriter = new XmlTextWriter(memoryStream, Encoding.UTF8);
return xs.Deserialize(memoryStream);
}
// 创建XML文件,若文件存在则找到该文件,参数1为xml路径,参数2为需要写入的信息
public void CreateXML(string xmlPath, string xmlData)
{
StreamWriter writer;
FileInfo xml = new FileInfo(xmlPath);
if (!xml.Exists)
{
writer = xml.CreateText();
}
else
{
xml.Delete();
writer = xml.CreateText();
}
writer.Write(xmlData);
writer.Close();
}
//读取XML文件 参数1为xml路径 返回读取的信息
public string LoadXML(string xmlPath)
{
StreamReader r = File.OpenText(xmlPath);
string info = r.ReadToEnd();
r.Close();
return info;
}
}
2,实例演示
(1)定义一个Test类
public class Test
{
public string name;
public string sex;
public Test()
{
}
public Test(string name,string sex)
{
this.name = name;
this.sex = sex;
}
}
(2)存储和读取操作
class Program
{
static void Main(string[] args)
{
XMLSaveAndRead xmlHandle = new XMLSaveAndRead();
//存储信息
List<Test> info = new List<Test>();
Test obj1 = new Test("小明","男");
info.Add(obj1);
Test obj2 = new Test("小红", "女");
info.Add(obj2);
//将info的类型List<Test>和自身info传入
string xmlInfo = xmlHandle.SerializeObject<List<Test>>(info);
xmlHandle.CreateXML("D:/TestData.xml", xmlInfo);
//读取信息
string xmlInfo1 = xmlHandle.LoadXML("D:/TestData.xml");
List<Test> info1 = (List<Test>)xmlHandle.DeserializeObject<List<Test>>(xmlInfo1);
for (int i = 0; i < info1.Count; i++)
{
Console.WriteLine("name=" + info1[i].name + " sex=" + info1[i].sex);
}
Console.ReadKey();
}
}
总结:在特定场合下比较实用。2018\4\20