c#XML数组反序列化只返回第一个元素

c#XML数组反序列化只返回第一个元素,c#,xml,deserialization,C#,Xml,Deserialization,我需要反序列化下一个XML,但结果数组只包含第一个元素: <data> <cards> <card id="1"> <title>card1text</title> <category>card1cat</category> </card> <card id="2"> <title>card2text<

我需要反序列化下一个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>
反序列化:

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);
        }
    }
}
反序列化似乎工作得很好,但我从 我尝试使用[XmlElement]代替XmlArray,但也失败了。 提前感谢。

例如,您可以使用从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; }
    }
[XmlRoot(ElementName=“card”)]
公务舱卡
{
[xmlement(ElementName=“title”)]
公共字符串标题{get;set;}
[xmlement(ElementName=“category”)]
公共字符串类别{get;set;}
[XmlAttribute(AttributeName=“id”)]
公共字符串Id{get;set;}
}
[XmlRoot(ElementName=“cards”)]
公共课卡
{
[XmlElement(ElementName=“卡”)]
公共列表卡{get;set;}
}
[XmlRoot(ElementName=“data”)]
公共类数据
{
[xmlement(ElementName=“cards”)]
公共卡{get;set;}
}
例如,您可以使用从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; }
    }
[XmlRoot(ElementName=“card”)]
公务舱卡
{
[xmlement(ElementName=“title”)]
公共字符串标题{get;set;}
[xmlement(ElementName=“category”)]
公共字符串类别{get;set;}
[XmlAttribute(AttributeName=“id”)]
公共字符串Id{get;set;}
}
[XmlRoot(ElementName=“cards”)]
公共课卡
{
[XmlElement(ElementName=“卡”)]
公共列表卡{get;set;}
}
[XmlRoot(ElementName=“data”)]
公共类数据
{
[xmlement(ElementName=“cards”)]
公共卡{get;set;}
}

非常感谢!但谁会让我回到我生命中的6小时?非常感谢!但是谁会让我回到我生命中的6个小时?你的代码工作得很好,只要再检查一下xml文件,让我解释一下[XElement]和[XmlArray]之间的区别。[XmlArray]需要两层标记,如cards和card in xml。所以你只需要一张班级卡(或者两张卡都不需要)。使用[XElement]时,每个标记都需要一个类。因此,您需要一个类卡片和一个类卡片。您的代码运行良好,只需再次检查xml文件,并解释[XElement]和[XmlArray]之间的区别。[XmlArray]需要两层标记,如cards和card in xml。所以你只需要一张班级卡(或者两张卡都不需要)。使用[XElement]时,每个标记都需要一个类。所以你需要一张班级卡和一张班级卡。