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