如何在XML中编写带有空值的属性?
本文关键字:空值 属性 XML | 更新日期: 2023-09-27 18:18:48
我使用linq to xml为应用程序编写一个小配置文件,并且有点惊讶地发现XAttributes不接受null作为它们的值-它们会抛出异常。
Null对于我的配置中的许多属性来说是一个完全有效的值,我不想在任何地方都要Null检查属性:
var attribute = _element.Attribute(attribute);
var value = attribute == null ? null : attribute.Value;
我不想这样写代码的另一个原因是,它会使错误的类型名称变得更容易——例如,如果一个属性拼写错误,它就会像一个存在的属性一样,但是有一个空值,而不是抛出异常。
我目前的解决方案如下,但它看起来有点难看+像你不应该做的事情。
我已经敲了一个小类,使它更容易编写和读取xml,我使用一个字符串只包含null字符来表示一个空字符串。
为了简洁起见,我省略了除索引器以外的所有内容:
public class XContainerWrapper
{
private readonly XElement _element;
public XContainerWrapper(XElement xElement)
{
_element = xElement;
}
public string this[string attribute]
{
get
{
var value = _element.Attribute(attribute).Value;
return value == "'0" ? null : value;
}
set
{
var valueToWrite = value ?? "'0";
_element.Add(new XAttribute(attribute, valueToWrite));
}
}
}
您可以编写自己的扩展方法,而不是XAttribute值getter:
public static class XmlExtensions {
public static string SafeValue(this XAttribute attribute) {
var value = attribute == null ? null : attribute.Value;
return value;
}
}
那么你可以使用
XAttribute a = null;
var value = a.SafeValue();