2017-10-05 4 views
-1

最初の要素が、得られた配列は、最初の要素で構成:C#のXMLアレイデシリアライゼーション戻りのみ私は、次の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私はXmlArrayではなく[XmlElement]を使ってみましたが、失敗しました。 ありがとうございます。

+0

あなたのコードだけで私は[XmlArray]と[XElementオブジェクト]の違いを説明してみましょう再び – Kassapa

+0

をxmlファイルを確認してください。 [XmlArray]には、xmlのカードとカードのようなタグの2つのレイヤーが必要です。だから、あなたは1つのクラスのカード(または両方ではないカード)が必要です。 [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