2017-05-07 40 views
2

我有一個XML文件(瓷磚瓦編輯):(在xml的片段)XML反序列的陣列不是在陣列容器

<map version="1.0" orientation="orthogonal" renderorder="right-down" width="64" height="64" tilewidth="32" tileheight="32" nextobjectid="1"> 
<tileset firstgid="1" name="GrassyTile_01" tilewidth="32" tileheight="32" tilecount="4" columns="2"> 
    <image source="GrassyTile_01.png" width="64" height="64"/> 
</tileset> 
<tileset firstgid="5" name="BlackTile_01" tilewidth="32" tileheight="32" tilecount="1" columns="1"> 
    <image source="BlackTile_01.jpg" width="32" height="32"/> 
</tileset> 

關於「地形設置」的元素,可以有X它們的數量,但它們不包含在XmlArray中,而只是彼此相關。

我尋找到使用XmlSerializer來Deserlialize這些元素作爲陣列的方法,但我找不到這樣做的正確方法。

這是我的代碼:

[XmlRoot("map")] 
     public class XMLMAP 
     { 
      [XmlAttribute("version")] 
      public string Version; 
      [XmlAttribute("orientation")] 
      public string Orientation; 
      [XmlAttribute("renderorder")] 
      public string Renderorder; 
      [XmlAttribute("width")] 
      public int Width; 
      [XmlAttribute("height")] 
      public int Height; 
      [XmlAttribute("tilewidth")] 
      public int Tilewidth; 
      [XmlAttribute("tileheight")] 
      public int TileHeight; 
      [XmlAttribute("nextobjectid")] 
      public int NextObjectID; 
      [XmlArray] 
      public XMLMAP_TILESET[] TileSets; 
      [XmlRoot("tileset")] 
      public class XMLMAP_TILESET 
      { 
       [XmlAttribute("firstgid")] 
       public string FirstGID; 
       //No need for rest of code 
      } 
     } 

任何人都知道這是可能的,否則我將不得不訴諸一個XMLReader?

+0

「地圖」是不是在所有 –

回答

1

嘗試重新定義你的XMLMAP類爲:

[XmlRoot("map")] 
public class XMLMAP 
{ 
    [XmlAttribute("version")] 
    public string Version; 
    [XmlAttribute("orientation")] 
    public string Orientation; 
    [XmlAttribute("renderorder")] 
    public string Renderorder; 
    [XmlAttribute("width")] 
    public int Width; 
    [XmlAttribute("height")] 
    public int Height; 
    [XmlAttribute("tilewidth")] 
    public int Tilewidth; 
    [XmlAttribute("tileheight")] 
    public int TileHeight; 
    [XmlAttribute("nextobjectid")] 
    public int NextObjectID; 

    [XmlElement("tileset")] 
    public List<TileSet> TileSets; 
} 

[XmlRoot("tileset")] 
public class TileSet 
{ 
    [XmlAttribute("firstgid")] 
    public string FirstGID; 
} 

XMLMAP包含List<TileSet>,並TileSet被定義爲包含所有必需屬性,一個單獨的類等

現在我可以

deserialise
var serializer = new XmlSerializer(typeof(XMLMAP)); 

var reader = new StreamReader(path); 
var map = (XMLMAP)serializer.Deserialize(reader); 
reader.Close(); 

而且可以看到map包含的列表2 TileSet s

請注意,我只能在爲您提供的xml的末尾添加一個關閉</map>標記之後執行此操作。

希望幫助

+0

做空根問我最終搞清楚了這一點的問題後,但還是謝謝你這麼多被別人實際上回答了這個問題! – XBLToothPik

+0

@XBLToothPik不用擔心,我已經在此之前如此掙扎,我知道它可以正確理解它之前是混亂 – Bassie