C# XML读取和保存(使用序列化和反序列化,可以直接将对象存储和读取对象)

最近在整理以前用到的知识,看到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(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(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 info = new List();
            Test obj1 = new Test("小明","男");
            info.Add(obj1);
            Test obj2 = new Test("小红", "女");
            info.Add(obj2);
            //将info的类型List和自身info传入
            string xmlInfo = xmlHandle.SerializeObject>(info);
            xmlHandle.CreateXML("D:/TestData.xml", xmlInfo);

            //读取信息        
            string xmlInfo1 = xmlHandle.LoadXML("D:/TestData.xml");
            List info1 = (List)xmlHandle.DeserializeObject>(xmlInfo1);
            for (int i = 0; i < info1.Count; i++)
            {
                Console.WriteLine("name=" + info1[i].name + "  sex=" + info1[i].sex);
            }
            Console.ReadKey();
        }
  }

总结:在特定场合下比较实用。2018\4\20

你可能感兴趣的:(Unity)