Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将数据从XML加载到列表_Xml_Silverlight_Linq_C# 4.0 - Fatal编程技术网

如何将数据从XML加载到列表

如何将数据从XML加载到列表,xml,silverlight,linq,c#-4.0,Xml,Silverlight,Linq,C# 4.0,我需要一个建议。我正在用silverlight开发一些简单的游戏,我需要将XML中的级别定义加载到列表中,但我不确定最好的方法是什么 我的xml看起来像 <Levels> <Level levelNumber = "1" startingX="2" startingY="2"> <Cells> <Cell CellType="A" PositionX="0" PositionY="0" /> <Cell C

我需要一个建议。我正在用silverlight开发一些简单的游戏,我需要将XML中的级别定义加载到列表中,但我不确定最好的方法是什么

我的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; }
    }
    ...
}
公共类级别
{
私有整数;
私人int startingX;
私人内部启动;
公共列表cellList=新列表();
公共整数
{
获取{return levelNumber;}
设置{levelNumber=value;}
}
...
}

你能给我一个建议吗?怎么办?

< P> >我想考虑使用Link QuixML。

我会写一个快速演示,但这个问题很好地演示了您需要的概念@


编辑:为了清楚起见,如果您确保您的单元格类使用这些Xml属性进行了注释,那么反序列化行为应该可以正常工作。

我只想在这里快速地做一些类似的事情(假设您的Xml中有多个级别):


谢谢你的回复。我的Cell类和Level类都有注释(没有发布带有注释的行)。。但是你能给我写一封反序列化的小圆顶吗?我可以让它工作..当我回到我的电脑上时,我会试着给你贴一个例子!我们不应该也假设像PositionX这样的值是整数而不是字符串吗?非常感谢,属性是整数,但它使用了Convert.ToInt32(l.Attribute(“startingX”).Value),它完全适合我..很高兴它能工作。理想情况下,您还需要进行某种检查,查看该值是否为null以及是否与整数兼容。
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();
}