如何将数据从XML加载到List

时间:2011-09-02 22:43:03

标签: xml silverlight linq c#-4.0

我需要一个建议。我在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; }
    }
    ...
}

请你告诉我如何做到这一点?

2 个答案:

答案 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();
}