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<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

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值