我需要一个建议。我在Silverlight中开发了一些简单的游戏,我需要将XML中的级别定义加载到List,但我不确定最好的方法是什么。
我的xml看起来像
<Levels>
<Level levelNumber = "1" startingX="2" startingY="2">
<Cells>
<Cell CellType="A" PositionX="0" PositionY="0" />
<Cell CellType="A" PositionX="1" PositionY="0" />
<Cell CellType="A" PositionX="2" PositionY="0" />
<Cell CellType="A" PositionX="3" PositionY="0" />
<Cell CellType="A" PositionX="4" PositionY="0" />
<Cell CellType="A" PositionX="5" PositionY="0" />
<Cell CellType="A" PositionX="0" PositionY="1" />
<Cell CellType="B" PositionX="1" PositionY="1" />
<Cell CellType="B" PositionX="2" PositionY="1" />
<Cell CellType="B" PositionX="3" PositionY="1" />
<Cell CellType="B" PositionX="4" PositionY="1" />
<Cell CellType="B" PositionX="5" PositionY="1" />
<Cell CellType="A" PositionX="1" PositionY="2" />
<Cell CellType="B" PositionX="2" PositionY="2" />
<Cell CellType="B" PositionX="3" PositionY="2" />
<Cell CellType="B" PositionX="4" PositionY="2" />
<Cell CellType="A" PositionX="5" PositionY="2" />
<Cell CellType="A" PositionX="1" PositionY="3" />
<Cell CellType="B" PositionX="2" PositionY="3" />
<Cell CellType="B" PositionX="3" PositionY="3" />
<Cell CellType="B" PositionX="4" PositionY="3" />
<Cell CellType="A" PositionX="4" PositionY="3" />
</Cells>
</Level>
</Levels>
我需要加载级别列表 我的等级
public class Level
{
private int levelNumber;
private int startingX;
private int startingY;
public List<Cell> cellList = new List<Cell>();
public int LevelNumber
{
get { return levelNumber; }
set { levelNumber = value; }
}
...
}
请你告诉我如何做到这一点?
答案 0 :(得分:1)
我考虑在这里使用LinqToXml。
我写了一个快速演示,但这个问题展示了你需要的概念@
De/Serialize directly To/From XML Linq
编辑:为清楚起见,如果确保您的Cell类使用这些Xml属性进行注释,则反序列化行为应该适合您。
答案 1 :(得分:1)
我只是在这里快速发送一些东西(假设你的xml中有多个级别):
XDocument xdoc = XDocument.Load(url); // assuming you're pulling your xml from a service.
if (xdoc != null)
{
var levels =
(from l in xdoc.Descendants("Level")
select new Level
{
levelNumber = l.Attribute("levelNumber").Value,
startingX = l.Attribute("startingX").Value,
startingY = l.Attribute("startingy").Value,
cellsList = (from c in l.Descendants("Cell")
select new Cell
{
CellType = c.Attribute("CellType").Value,
PositionX = c.Attribute("PostionX").Value,
PositionY = c.Attribute("PositionY").Value
}).ToList()
}
).ToList();
}