gpt4 book ai didi

c# - 在 C# 中反序列化嵌套的 xml(Unity 脚本)

转载 作者:太空宇宙 更新时间:2023-11-03 15:06:38 25 4
gpt4 key购买 nike

我目前正在使用 unity3D 制作游戏。我有一个 xml 文档,其中包含许多装有各种扑克牌的牌组。 xml 文件看起来像这样:

<?xml version="1.0" encoding="utf-8" ?>
<CardCollection>
<Cards>
<Deck DeckId="1">
<Card Id="1">
<CardElement1></CardElement1>
<CardElement2></CardElement2>
</Card>
<Card Id="2">
<CardElement1></CardElement1>
<CardElement2></CardElement2>
</Card>
<Card Id="3">
<CardElement1></CardElement1>
<CardElement2></CardElement2>
</Card>
</Deck>
<Deck DeckId="2">
<Card Id="1">
<CardElement1></CardElement1>
<CardElement2></CardElement2>
</Card>
</Deck>
</Cards>
</CardCollection>

我有一个 Card.cs 类,如下所示:

using System.Xml.Serialization;

public class Card {

[XmlAttribute("Id")]
public int id;

[XmlElement("CardElement1")]
public string cardElement1;

[XmlElement("CardElement2")]
public string cardElement2;
}

还有一个 Deck.cs 类:

使用 System.Xml.Serialization;

public class Deck {

[XmlAttribute("DeckId")]
public int deckId;

[XmlArray("Card")]
public Card[] cards;
}

我正在使用一个名为 CardContainer 的类来使用以下信息填充 List decks:

using System.Collections.Generic;
using System.Xml.Serialization;
using System.IO;
using UnityEngine;

[XmlRoot("CardCollection")]
public class CardContainer {

[XmlArray("Cards")]
[XmlArrayItem("Deck")]
public List<Deck> decks = new List<Deck>();

public static CardContainer Load(string path)
{
TextAsset xml = Resources.Load<TextAsset>(path);

XmlSerializer serializer = new XmlSerializer(typeof(CardContainer));

StringReader reader = new StringReader(xml.text);

CardContainer cards = serializer.Deserialize(reader) as CardContainer;

reader.Close();

return cards;
}

}

我可以使用这段代码获取牌组的 ID:

CardContainer cardContainer = CardContainer.Load(path);
foreach(Deck deck in cardContainer.decks){
Debug.Log(deck.deckId);
}

但是我不知道如何在 Deck 对象中反序列化和填充 Card 数组。

最佳答案

我通过将 Deck 类更改为以下内容解决了这个问题:

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

public class Deck {

[XmlAttribute("DeckId")]
public int deckId;

[XmlElement("Card")]
public List<Card> cards = new List<Card>();
}

关于c# - 在 C# 中反序列化嵌套的 xml(Unity 脚本),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43148857/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com