unity class to xml

编写:solq
blog:http://www.cnblogs.com/solq

资源放在 Assets\StreamingAssets\ 目录


SXMLTool.cs

/*编写:solq
blog:www.cnblogs.com/solq
*/
using UnityEngine;
using System.Xml.Serialization;
using System.IO;
using System.Text;
using System.Xml;
using System.Collections.Generic;
public class SXMLTool
{

    public static string getApplicationDataPaths
    {
        get { 
            switch(Application.platform)
            {
                case RuntimePlatform.Android:
                    return Application.persistentDataPath+"/assets/";
                case RuntimePlatform.IPhonePlayer:
                    return Application.dataPath + "/Raw/";
                default:
                    return Application.dataPath + "/StreamingAssets/";
            }
        }
    }
    public static void Path(ref string path)
    {
        path = getApplicationDataPaths + path;
    }
    protected static Dictionary<string, XmlDocument> cacheXML = new Dictionary<string, XmlDocument>(); 
    public static XmlDocument LoadXmlDocument(string path) //加载 xml
    {
        Path(ref path);
        if (cacheXML.ContainsKey(path)) return cacheXML[path];

        XmlDocument xmlDoc=new XmlDocument();
        cacheXML.Add(path, xmlDoc);
        xmlDoc.Load(path);
        return xmlDoc;
    }
    public static void ObjectToXml(object obj, string path) //类保存xml
    {
        Path(ref path);
        XmlSerializer ser = new XmlSerializer(obj.GetType());
        FileStream fs = File.Open(
                path,
                FileMode.Create, //每次都是新建
                FileAccess.Write,
                FileShare.ReadWrite);

        StreamWriter streamWriter = new StreamWriter(fs, System.Text.Encoding.UTF8); //格式化。。。。
        ser.Serialize(streamWriter, obj);
        streamWriter.Close();
        fs.Close();
    }
   
    public static T XmlToObject<T>(string path) //加载 xml 文件,,然后解析成相应类
    {
        Path(ref path);
        byte[] bytes = Encoding.UTF8.GetBytes(File.ReadAllText(path).Trim().ToString());
        MemoryStream mem = new MemoryStream(bytes);
        XmlSerializer ser = new XmlSerializer(typeof(T));

        return (T)ser.Deserialize(mem);
    }   

}

RoleConfig.cs

using System.Collections.Generic;
using System.Xml.Serialization;
public class RoleConfig
{
    public string name;//用户名
    public string sex;//性别

    public List<Skill> skill1 = new List<Skill>();//武器1的技能
    public List<Skill> skill2 = new List<Skill>();//武器2的技能
    public List<Skill> skill3 = new List<Skill>();//武器3的技能

    [XmlElement("ItemObj")]
    public List<ItemObj> item = new List<ItemObj>();//携带道具

    [XmlElement("dayTask")]
    public dayTask dayTask = new dayTask();

    public int loginCount = 0;//连续登陆的计数

    //******************仓库****************
    public List<Equip> equips = new List<Equip>();//装备
    public List<Amulet> amulets = new List<Amulet>();//护符
    public List<Weapon> weapons = new List<Weapon>(); //武器
    public List<Skill> skills = new List<Skill>(); //技能
    public List<ItemObj> items = new List<ItemObj>();//道具
    public List<Piece> pieces = new List<Piece>();//装备碎片


    public void save(string path)
    {
        SXMLTool.ObjectToXml(this, path);
    }
}

//扩展
public class Equip
{
    [XmlText]
    public string Name;

    [XmlAttribute("index")]
    public int index;
}

public class Amulet
{
    [XmlText]
    public string Name;

    [XmlAttribute("index")]
    public int index;
}

public class Weapon
{
    [XmlText]
    public string Name;

    [XmlAttribute("index")]
    public int index;
}

public class Skill
{
    [XmlText]
    public string Name;

    [XmlAttribute("index")]
    public int index;
}

public class ItemObj
{
    [XmlElement("Filter")]
    public string Name;

    [XmlAttribute("index")]
    public int index;

    [XmlAttribute("Num")]
    public int Num;
}

public class Piece
{
    [XmlText]
    public string Name;

    [XmlAttribute("index")]
    public int index;
}

public class dayTask
{
    [XmlElement("Filter")]
    //[XmlText]
    public string enemyID;

    [XmlAttribute("index")]
    public int index;

    [XmlAttribute("enemyNum")]
    public string enemyNum;

}

test.cs

using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class TestConfig : MonoBehaviour {

	void Start () {
 
        //保存
        RoleConfig cfg = new RoleConfig();
        cfg.name = "hello xxfrreee";

        Weapon w1 = new Weapon();

        w1.index = 1;
        w1.Name = "jn-10225";
        cfg.weapon.Add(w1);

        SXMLTool.ObjectToXml(cfg, "test2.xml");


        //读取
        RoleConfig test = SXMLTool.XmlToObject<RoleConfig>("test2.xml");

        print("name:" + test.name);
        print("  :" + test.weapon.Count);
	}

}

  

原文地址:https://www.cnblogs.com/solq/p/2547308.html