从列表创建XElement<;T>;其中T.property为null

本文关键字:其中 property null gt 列表 创建 lt XElement | 更新日期: 2023-09-27 17:59:13

我正在从Web服务接收数据。进来的XML类似于:

<data>
    <item>
        <code>a</code>
        <price>2.89</price>
    </item>
    <item>
        <code>a</code>
        <price>2.89</price>
        <colour>blue</colour>
    </item>
</data>

因此,我们看到一个项目有一个额外的性质的颜色。

好的,这将转换为List<项目>这就是我掌握它的点。

我需要将此列表转换为XDocument。

使用:

var xml = new XDocument(
new XDeclaration("1.0", "utf-16", "yes"),
new XElement("data",
from i in myList
select new XElement("item",
new XElement("price", i.price),
new XElement("code", i.code),
new XElement("colour", i.colour))));

(我是凭记忆打出来的,请原谅拼写错误)

这里,它出错是因为i.color为空。

我该如何应对?

提前感谢

Griff

从列表创建XElement<;T>;其中T.property为null

在尝试访问i.color之前,您需要检查它是否为null

您可以巧妙地使用空合并运算符来完成此操作,如:

new XElement("colour", i.colour ?? ""))));

假设您想要一个空字符串作为值,如果i.colournull

更新

根据您下面的评论,如果您不希望在i.colour为null的情况下添加元素,那么请独立于XDocument实例化创建它,并根据需要添加它。

var xml = new XDocument(...);
if(i.colour != null)
{
  xml.Add(new XElement(...));
}

}

为了避免在colour为null时添加新的XElement,您可以使用三元运算符并根据情况返回null或新XElement

var xml = new XDocument(
    new XDeclaration("1.0", "utf-16", "yes"),
    new XElement("data",
    from i in myList
    select new XElement("item",
        new XElement("price", i.price),
        new XElement("code", i.code),
        i.colour == null ?
            null : new XElement("colour", i.colour)
    )));