2017-10-05 107 views
-1

我需要反序列化下一个XML,但所得到的阵列仅由第一元件的:C#XML阵列反序列化仅返回第一元件

<data> 
<cards> 
    <card id="1"> 
     <title>card1text</title> 
     <category>card1cat</category> 
    </card> 
    <card id="2"> 
     <title>card2text</title> 
     <category>card2cat</category> 
    </card> 
    <card id="3"> 
     <title>card3text</title> 
     <category>card3cat</category> 
    </card> 
</cards> 
</data> 

对象来创建:

[XmlRoot("data")] 
public class Data 
{ 
    [XmlArray("cards")] 
    [XmlArrayItem("card", typeof(Card))] 
    public Card[] cards { get; set; } 
} 

public class Card 
{ 
    [XmlAttribute("id")] 
    public int id { get; set; } 
    public string title { get; set; } 
    public string category { get; set; } 
} 

反序列化:

public Data data { get; private set; } 

private void Awake() 
{ 
    var deserializer = new XmlSerializer(typeof(Data)); 
    var stream = new StreamReader(filePath); 
    data = deserializer.Deserialize(stream) as Data; 
    stream.Close(); 

    if (data.cards != null) 
    { 
     foreach (var card in data.cards) 
     { 
      print("card " + card.id + " " + card.title); 
     } 
    } 
} 

反序列化似乎工作正常,但我得到的数组只有第一个ele 我尝试使用[XmlElement]而不是XmlArray,但也失败了。 预先感谢您。

+0

你的代码工作正常,只是检查XML文件再次 – Kassapa

+0

让我解释一下之间[的XElement]和[XmlArray]差异。 [XmlArray]需要两层标签,如xml中的卡片和卡片。所以你只需要一个类卡(或卡不是两个)。当您使用[XElement]时,您需要为每个标签设置一个类。所以你需要一张班卡和一张班卡。 – jdweng

回答

2

例如,您可以使用http://xmltocsharp.azurewebsites.net/从xml获取C#类。

[XmlRoot(ElementName = "card")] 
    public class Card 
    { 
     [XmlElement(ElementName = "title")] 
     public string Title { get; set; } 
     [XmlElement(ElementName = "category")] 
     public string Category { get; set; } 
     [XmlAttribute(AttributeName = "id")] 
     public string Id { get; set; } 
    } 

    [XmlRoot(ElementName = "cards")] 
    public class Cards 
    { 
     [XmlElement(ElementName = "card")] 
     public List<Card> Card { get; set; } 
    } 

    [XmlRoot(ElementName = "data")] 
    public class Data 
    { 
     [XmlElement(ElementName = "cards")] 
     public Cards Cards { get; set; } 
    } 
+0

非常感谢!但是谁又会让我回到我生命中的6个小时? – Madcode