我有一个库项目,其中对象被序列化为XML格式,供ASP.NET应用程序中的用户进一步下载。另外我已经使用XSD生成序列化类型。序列化的类型数量非常多。每种类型都被序列化为自己的XML。某些类型具有字符串属性,有时这些属性包含空字符串。在序列化期间,这些属性已被序列化为某些类似
的属性<propertyName />
因此,这些属性因XSD而无效(它们不是必需的,但有一些限制,如字符串最小字符串长度等。
有没有办法配置XMLSerializer而不是序列化空字符串来清空所有已序列化类型的xml元素。
对于序列化,我使用System.Xml.XmlSerializer
。
答案 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,也允许元素为空或零。
与空内容不同。 XML具有特定属性,表示该值为“nil&#39;。
。”XML文档中完全省略了该标记。空或零不一样。 如果minOccurs = 1
,此将触发验证错误答案 2 :(得分:0)
如果您要从数据库中获取数据,则可以使用以下条件:-
if (Dbobject.propertyName == ""){
XMLObject.propertyName = null;
} else {
XMLObject.propertyName = Dbobject.propertyName;
}
在XML序列化期间,将不对null值进行序列化,并且将跳过属性名称。