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

	}



}

  

你可能感兴趣的:(Class)