我正在开发一个项目,其中一个对象被解析为XmlDocument并发送到服务。一切似乎都正常。但是空参数存在问题。
当参数填充空字符串(“”或string.Empty)时,将解析以下XmlElement:
<parameterName></parameterName>
我需要像这样解析它:
<parameterName />
我被告知这一直是这样的,直到我们将这个项目从.NET 1.1迁移到.NET 2.0。我认为将空的元素解析为<parameterName/>
是合乎逻辑的。但它似乎没有。
用于将参数解析为XML的代码是:
public override XmlNode GetXml(XmlNode parentNode)
{
if (!Assigned) return null;
XmlElement node = parentNode.OwnerDocument.CreateElement(Name);
parentNode.AppendChild(node);
node.InnerText = Value.ToString();
return node;
}
这似乎不是很奇怪,只是创建一个空值的元素。 使用此方法解析此对象的所有参数,并将其放在一个大的XmlDocument中。 签出XmlDocument.OuterXml时,我可以看到元素被解析为'不正确'。
我是否有一种简单的方法可以改变这种行为。在TFS中搜索代码历史时,我看不到代码中的任何重大更改,这将导致这种不正确的解析。唯一的大变化是改变.NET框架版本(1.1到2.0)并将项目从.NET 1.1 Web服务更改为.NET 2.0类库。
答案 0 :(得分:2)
在元素上将IsEmpty属性设置为true
:
public override XmlNode GetXml(XmlNode parentNode)
{
if (!Assigned) return null;
XmlElement node = parentNode.OwnerDocument.CreateElement(Name);
parentNode.AppendChild(node);
node.InnerText = Value.ToString();
node.IsEmpty = string.IsNullOrEmpty(node.InnerText);
return node;
}