从列表创建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
在尝试访问i.color之前,您需要检查它是否为null
。
您可以巧妙地使用空合并运算符来完成此操作,如:
new XElement("colour", i.colour ?? ""))));
假设您想要一个空字符串作为值,如果i.colour
是null
。
更新
根据您下面的评论,如果您不希望在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)
)));