Unity XML的序列化和反序列化

開始學習了,要不斷的積累才能產生質變,加油吧!!!


今天學習一下XML的讀取和寫入,XML作爲常用的數據存儲,瞭解並掌握是必須的。

using UnityEngine;
using System.Collections;
using System.Text;
using System.IO;
using System.Xml;
using System.Xml.Serialization;
using System;

/// <summary>
/// XML序列化
/// </summary>
public class XMLUtils
{
    /// <summary>
    /// 字節轉string
    /// </summary>
    /// <param name="b">字節數組</param>
    /// <returns></returns>
    public static string UTF8ByteArrayToString(byte[] b)
    {
        UTF8Encoding encoding = new UTF8Encoding();
        string s = encoding.GetString(b);
        return (s);
    }

    /// <summary>
    /// 字符串轉字節數組
    /// </summary>
    /// <param name="s">字符內容</param>
    /// <returns></returns>
    public static byte[] StringToUTF8ByteArray(string s)
    {
        UTF8Encoding encoding = new UTF8Encoding();
        byte[] b = encoding.GetBytes(s);
        return b;
    }

    /// <summary>
    /// 反序列化
    /// </summary>
    /// <param name="xmlString">string內容</param>
    /// <param name="t">類型</param>
    /// <returns></returns>
    public static object DeserializeXML(string xmlString, Type t)
    {
        MemoryStream ms = new MemoryStream(StringToUTF8ByteArray(xmlString));

        XmlSerializer xs = new XmlSerializer(t);
        return xs.Deserialize(ms);
    }

    /// <summary>
    /// 序列化--XML文件
    /// </summary>
    /// <param name="mObject">對象</param>
    /// <param name="t">類型</param>
    /// <param name="XMLPath">生成的xml路徑</param>
    public static void SerializeXML(object mObject, Type t, string XMLPath)
    {
        XmlWriterSettings xws = new XmlWriterSettings();
        xws.Encoding = Encoding.UTF8;

        XmlWriter xw = XmlWriter.Create(XMLPath, xws);

        XmlSerializer xs = new XmlSerializer(t);
        xs.Serialize(xw, mObject);
    }

    /// <summary>
    /// 序列化--內存流
    /// </summary>
    /// <param name="mObject">對象</param>
    /// <param name="t">類型</param>
    /// <returns></returns>
    public static string SerializeObject(object mObject, Type t)
    {
        MemoryStream ms = new MemoryStream();
        XmlTextWriter xtw = new XmlTextWriter(ms, Encoding.UTF8);

        XmlSerializer xs = new XmlSerializer(t);
        xs.Serialize(xtw, mObject);

        ms = (MemoryStream)xtw.BaseStream;
        string xmlString = UTF8ByteArrayToString(ms.ToArray());
        Debug.Log("" + xmlString);
        return xmlString;
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章