2016-08-08 1 views
-1

J'ai la classe suivante:Lire tableau de chaînes à partir du fichier XML

using System.Collections; 
using System.Xml; 
using System.Xml.Serialization; 

public class Resource 
{ 
[XmlAttribute("name")] 
public string m_Name { get; set; } 

public string[] ItemDrop; 

} 

Et ce fichier XML:

<ResourceData> 
<Resources> 
    <Resource name="Iron Ore"> 
     <ItemDrop type="array"> 
      <value>Iron Piece</value> 
     </ItemDrop> 
    </Resource> 
    <Resource name="Tree"> 
     <ItemDrop type="array"> 
      <value>Log</value> 
      <value>Leaves</value> 
      <value>Apple</value> 
     </ItemDrop> 
    </Resource> 
</Resources> 
</ResourceData> 

Je suis en train de fichier désérialiser et placer ces deux objets de ressources dans le tableau.

Il lit correctement m_Name mais il n'y a rien dans le tableau ItemDrop.

Voici comment je charge les données:

public static ResourceContainer Load(string path) 
{ 
    var serializer = new XmlSerializer(typeof(ResourceContainer)); 
    using (var stream = new FileStream(path, FileMode.Open)) 
    { 
     return serializer.Deserialize(stream) as ResourceContainer; 
    } 
} 
+0

Mark avec XmlArray et XmlArrayItem pour spécifier l'intérieur structure. – Igor

+0

Fonctionne bien, merci monsieur! ;) – Roddeck

Répondre

0

Vous devez sûrement XmlArrayItem attribut:

public class Resource 
{ 
    [XmlAttribute("name")] 
    public string m_Name { get; set; } 

    [XmlArrayItem("value")] 
    public string[] ItemDrop; 
} 
0

Essayez xml Linq

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Xml; 
using System.Xml.Linq; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     const string FILENAME = @"c:\temp\test.xml"; 
     static void Main(string[] args) 
     { 
      Resource resourse = new Resource(); 
      resourse.ReadXML(FILENAME); 
     } 
    } 

    public class Resource 
    { 
     public static List<Resource> resources { get; set; } 
     public string m_Name { get; set; } 
     public string[] ItemDrop; 

     public void ReadXML(string filename) 
     { 
      XDocument doc = XDocument.Load(filename); 
      resources = doc.Descendants("Resource").Select(x => new Resource() { 
       m_Name = (string)x.Attribute("name"), 
       ItemDrop = x.Element("ItemDrop").Elements("value").Select(y => (string)y).ToArray() 
      }).ToList(); 
     } 

    } 
}