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);
	}
}
                    
                
                
            
        
浙公网安备 33010602011771号