unity序列化和反序列XML,并添加属性

  1. using UnityEngine;   
  2. using System.Collections;   
  3. using System.Xml;   
  4. using System.Xml.Serialization;   
  5. using System.IO;   
  6. using System.Text;   
  7.    
  8. public class Reward    
  9.  {   
  10.    public Task task;   
  11.    public Attribute attribute;   
  12.    public Reward () {}   
  13.    public struct Task  
  14.    {   
  15.       [XmlAttribute("taskNo")]   
  16.       public int taskNo{ get; set;}   
  17.       [XmlAttribute("taskReward")]   
  18.       public int taskReward{ get; set;}   
  19.       public Id id1;  
  20.       public Id id2;  
  21.            public Id id3;  
  22.    }  
  23.    public struct Id  
  24.    {  
  25.       [XmlAttribute("flag")]   
  26.       public bool flag{ get; set;}   
  27.       [XmlAttribute("name")]   
  28.       public string name{ get; set;}  
  29.    }  
  30. }  
  31.   
  32. public class AchievementManager: MonoBehaviour {   
  33.    Reward reward ;   
  34.    FileInfo t ;  
  35.    string _data;      
  36.    void Start ()   
  37.    {      
  38.     reward = new Reward();  
  39.    t = new FileInfo(Application.dataPath+"\\"+ "Achievement.xml");   
  40.    LoadXML();  
  41.    reward.task.id1.name = "杨纯/nate";  
  42.    reward.task.id2.name = "有点笨";  
  43.    reward.task.id3.name = "dlnuchunge";  
  44.    Save();  
  45.    }   
  46.    
  47.    void LoadXML()   
  48.    {   
  49.       if(t.Exists)   
  50.       {   
  51.           StreamReader r = t.OpenText();   
  52.           string _info = r.ReadToEnd();   
  53.           r.Close();   
  54.           _data=_info;   
  55.           if(_data.ToString() != "")   
  56.           {   
  57.             reward = (Reward)DeserializeObject(_data);                
  58.           }   
  59.       }             
  60.    }   
  61.    public void Save()  
  62.    {       
  63.       _data = SerializeObject(reward);   
  64.       StreamWriter writer;   
  65.       if(t.Exists)   
  66.       {   
  67.          t.Delete();    
  68.       }      
  69.       writer = t.CreateText();   
  70.       writer.Write(_data);   
  71.       writer.Close();   
  72.    }     
  73.    string UTF8ByteArrayToString(byte[] characters)   
  74.    {        
  75.       UTF8Encoding encoding = new UTF8Encoding();   
  76.       string constructedString = encoding.GetString(characters);   
  77.       return (constructedString);   
  78.    }   
  79.    
  80.    byte[] StringToUTF8ByteArray(string pXmlString)   
  81.    {   
  82.       UTF8Encoding encoding = new UTF8Encoding();   
  83.       byte[] byteArray = encoding.GetBytes(pXmlString);   
  84.       return byteArray;   
  85.    }   
  86.    
  87.    // Here we serialize our Reward object of reward   
  88.    string SerializeObject(object pObject)   
  89.    {  
  90.       string XmlizedString = null;   
  91.       MemoryStream memoryStream = new MemoryStream();   
  92.       XmlSerializer xs = new XmlSerializer(typeof(Reward));   
  93.       XmlTextWriter xmlTextWriter = new XmlTextWriter(memoryStream, Encoding.UTF8);   
  94.       xs.Serialize(xmlTextWriter, pObject);   
  95.       memoryStream = (MemoryStream)xmlTextWriter.BaseStream;   
  96.       XmlizedString = UTF8ByteArrayToString(memoryStream.ToArray());   
  97.       return XmlizedString;   
  98.    }   
  99.    
  100.    // Here we deserialize it back into its original form   
  101.    object DeserializeObject(string pXmlizedString)   
  102.    {   
  103.       XmlSerializer xs = new XmlSerializer(typeof(Reward));   
  104.       MemoryStream memoryStream = new MemoryStream(StringToUTF8ByteArray(pXmlizedString));   
  105.       XmlTextWriter xmlTextWriter = new XmlTextWriter(memoryStream, Encoding.UTF8);   
  106.       return xs.Deserialize(memoryStream);   
  107.    }   
  108. }  
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值