Linq2XML使用列表中的列表stackoverflowexception构建XDocument

时间:2014-01-22 19:49:13

标签: linq linq-to-xml stack-overflow

我正在尝试创建一个如下所示的XML:

<RootList>
    <Root>
        <ID>value1</ID>
        <Number>value2</Number>
        <Quantity>value3</Quantity>
    </Root>
    <Root>
        <ID>value1</ID>
        <Number>value2</Number>
        <Quantity>value4</Quantity>
    </Root>
    <Root>
        <ID>value5</ID>
        <Number>value6</Number>
        <Quantity>value7</Quantity>
    </Root>
</RootList>

通过使用以下接口的实例。

interface IRoot
{
    int ID { get; }
    string Number { get; set; }
    List<IQuantity> List { get; set; }
}

interface IQuantity
{
    int QuantityID { get; }
    double Quantity { get; set; }
}

下面的代码是我用来创建XML的代码,但由于stackoverflowexception,进程正在终止。

XDocument doc = new XDocument(
    new XDeclaration("1.0", "utf-8", null),
    new XElement("RootList",
        this._list.Select(root =>
            root.List.Select(quantity =>
                new XElement("Root", 
                    new XElement("ID", root.ID.ToString()),
                    new XElement("Number", root.Number),
                    new XElement("Quantity", quantity.Quantity.ToString())
                )
            )
        )
    )
);

如果我删除内部Select(我遍历列表中的列表),则输出有效。我不知道如何实际跟踪此错误,但我确定这是由于内部选择。有没有其他人有同样的问题,或有任何关于此的提示? :)

1 个答案:

答案 0 :(得分:0)

现在发现了这个问题,我留下了一些XElements,因为我认为它们是不必要的,但是在root的第一个子节点下将有一个类变量作为其值。我制作了一个私有的静态Guid _guid,现在它可以工作了。请原谅。