Unity C# 利用 XmlSerializer 对Xml 做简单反序列化

       最近面试遇到做一个可以在外部快速修改的类似配置文件的东西,想到了Xml,用XmlSerializer 把Xml反序列化为一个类。下面贴一下当时写的代码,有些粗糙,有不对的地方希望大家多指点我这个还在找工作的小白。

使用XmlSerializer 需要引用命名空间是System.Xml.Serialization。

public Manger Manger { get; set; } 

public void LoadXml()
{
        //Xml文科存放的路径,暂时先放在这里
        string xmlpath = Application.dataPath + "/mangerXml.xml";  
        StreamReader xmlsr = new StreamReader(xmlpath);
        //将Xml内容反序列化为 Manger 这个类
        XmlSerializer xmlSerializer = new XmlSerializer(typeof(Manger));
        Manger = xmlSerializer.Deserialize(xmlsr) as Manger; 
        //获得Manger 使用
        Debug.Log(Manger.MaxTime);

}


//Manger 类是根据Xml文件内容定义
public class Manger
{
    public float MaxTime;
    public float CoolDown{ get; set; }
    public List Nums { get; set; }
    public float K { get; set; }
    public List ObjInfos{ get; set; }

}

public class ObjInfo
{
    public int SpriteID { get; set; }
    public int Weight { get; set; }
    public float During { get; set; }
    public int Heigh { get; set; }
    public float Time { get; set; }
    public float Vck { get; set; }
    public Effect Effect { get; set; }
    public float Timer { get; set; }
    public float TimerK { get; set; }
}

public enum Effect
{
    A,
    B,
    C,
    D
}

XML使用结构化方法来标记数据,天生有很好的扩展性,Xml的格式:

  •  标签由包围在一个小于号(<)和一个大于号(>)之间的文本组成,例如<标记>
  • 起始标签(外国语:starttag)表示一个特定区域的开始,例如<起始>;

  • 结束标签(外国语:end tag)定义了一个区域的结束,除了在小于号之后紧跟着一个斜线(/)外,和起始标签基本一样,例如

下面是对应的Xml文件



  100
  2
  
    0
    1
  
  1
  
    
      4
      50
      2
      5
      
      0
      A
    
    
      8
      15
      2
      -20
      
      0
      C
    
  

最后分享一个根据 Xml 、JSon内容快速创建对应反序列化的类的小技巧,不知道的可以看一下

复制Xml、Json内容,把光标定位到你要创建一个Class的地方,Vs编辑器-编辑-选择性粘贴-将Xml、Json粘贴为类,很方便有没有,以上就是简单的Xml文件反序列化了,但真正要用到项目里还是做一层封装吧,把序列号和反序列化放一块,注意一下数据的编码格式还有序列号时的一些限制。

你可能感兴趣的:(Unity)