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

      

  • 相关阅读:
    图-拓扑排序
    图-最短路径-Dijkstra及其变种
    【链表问题】打卡7:将单向链表按某值划分成左边小,中间相等,右边大的形式
    【链表问题】打卡5:环形单链表约瑟夫问题
    【链表问题】打卡6:三种方法带你优雅判断回文链表
    【链表问题】打卡4:如何优雅着反转单链表
    【链表问题】打卡3:删除单链表的中间节点
    【链表问题】打卡2:删除单链表的第 K个节点
    史上最全面试题汇总,没有之一,不接受反驳
    一些可以让你装逼的算法技巧总结
  • 原文地址:https://www.cnblogs.com/solq/p/2547308.html
Copyright © 2020-2023  润新知