2

我正在尝试将 XML 文档转换为具有预定义类的 List<>

我的 xml 数据集 TestData.xml

<Objects>
    <Object ID="1">
        <ItemOne>"Hickory"</ItemOne>
        <ItemTwo>"Dickory"</ItemTwo>
        <ItemThree>"Dock"</ItemThree>
    </Object>

    <Object ID="2">
        <ItemOne>"The"</ItemOne>
        <ItemTwo>"Mouse"</ItemTwo>
        <ItemThree>"Went"</ItemThree>
    </Object>
</Objects>

主程序

class Program
{
    static void Main(string[] args)
    {

        XElement TestData = XElement.Load("TestData.xml");

       List<Test> myTest = new List<Test>(from d in TestData.Descendants("Objects")
                                     select new Test(
                                         d.Element("ItemOne").Value.ToString(),
                                         d.Element("ItemTwo").Value.ToString(),
                                         d.Element("ItemThree").Value.ToString()));

        myTest.ForEach(i => Console.WriteLine("{0} {1} {2}", i.itemOne, i.itemTwo, i.itemThree));

        Console.ReadLine();
    }


}

我试图将数据形成的类

class Test
{
    public string itemOne { get; set; }
    public string itemTwo { get; set; }
    public string itemThree { get; set; }
}

我想出去

Hickory Dickory Dock
The Mouse went

但我最终什么也没得到。看起来 LINQ 查询找到了数据,但从未将其分配给List<Test>myTest,该值在调试器中显示为 null。我不确定我做错了什么。

我想将 XML 转换为,List<Test>以便我可以随机重新排列对象。我打算只使用 int[] 数组并按“ID”排序,但我不知道数组的实际长度并想动态分配它,所以我不得不做一个list<>. 我愿意接受其他实现这一目标的建议。

4

2 回答 2

5

未经测试,我认为您应该编写TestData.Descendants("Object")而不是TestData.Descendants("Objects"). for 的参数Descendants必须与您要选择的节点的名称相匹配。

于 2012-12-06T09:14:16.317 回答
2

你已经在根Objects

做这个

from d in TestData.Descendants("Object")
                               --------
于 2012-12-06T09:14:39.947 回答