不要将空字符串序列化为XML

时间:2015-11-26 08:35:36

标签: c# .net xml

我有一个库项目,其中对象被序列化为XML格式,供ASP.NET应用程序中的用户进一步下载。另外我已经使用XSD生成序列化类型。序列化的类型数量非常多。每种类型都被序列化为自己的XML。某些类型具有字符串属性,有时这些属性包含空字符串。在序列化期间,这些属性已被序列化为某些类似

的属性
<propertyName />

因此,这些属性因XSD而无效(它们不是必需的,但有一些限制,如字符串最小字符串长度等。

有没有办法配置XMLSerializer而不是序列化空字符串来清空所有已序列化类型的xml元素。

对于序列化,我使用System.Xml.XmlSerializer

3 个答案:

答案 0 :(得分:0)

您需要实现xml编写器/阅读器才能使序列化工作;

您还需要编辑编写器和读取器以处理条件,首先检查参数是否为空字符串,然后再编写新的xml元素并放置其值。

@QueryResult
class QueryResult{
   Map<String, Object> node;
}

参考资料:

http://forum.codecall.net/topic/58239-c-tutorial-reading-and-writing-xml-files/ http://www.dotnetperls.com/xmlwriter

答案 1 :(得分:0)

我建议你回过头来仔细阅读XML规范。见http://www.w3.org/TR/REC-xml/#sec-starttags 在哪里说:

  

[定义:没有内容的元素被认为是空的。]空元素的表示&gt;是一个开始标记,紧跟一个结束标记,或者   一个空元素标签。 [定义:空元素标签采用特殊形式:]

所以这个:

<propertyName />

完全等同于:

<propertyName></propertyName>

...任何以不同方式处理它们的XML处理器都不符合规范。

我发现人们在处理XML和XML模式时经常会混淆以下概念:

  • 标记为空内容。

任何一种形式都可以接受。空与&#39; null&#39;不同。或者&#39; nil&#39;。 即使模式中的minOccurs = 1,也允许元素为空或零。

  • null value / nil value。

与空内容不同。 XML具有特定属性,表示该值为“nil&#39;。

。”
  • 缺少标签。

XML文档中完全省略了该标记。空或零不一样。 如果minOccurs = 1

,此触发验证错误

答案 2 :(得分:0)

如果您要从数据库中获取数据,则可以使用以下条件:-

if (Dbobject.propertyName == ""){
    XMLObject.propertyName = null;
} else {
    XMLObject.propertyName = Dbobject.propertyName;
}

在XML序列化期间,将不对null值进行序列化,并且将跳过属性名称。