的Xml反序列化的空元素
失败我有一个XML文件,类似于过的Xml反序列化的空元素
<Reports xmlns="">
<Report>
<ReportID>1</ReportID>
<ParameterTemplate />
</Report>
</Reports>
它不能序列化到这个对象
[XmlType(TypeName = "Report")]
public class Report
{
[XmlElement("ReportID")]
public int ID { get; set; }
[XmlElement("ParameterTemplate")]
public XElement ParameterTemplate { get; set; }
}
它的失败,因为空ParameterTemplate元素,因为如果它包含子元素它反序列化罚款。
我该如何得到这个工作?
这是我的反串行化代码
var serializer = new XmlSerializer(typeof(Report));
return (Report)serializer.Deserialize(source.CreateReader());
唯一的例外是
向XMLReader必须是类型元素的节点,而不是类型结束元素的节点上。
我怎样才能得到这个反序列化与现有的XML?
感谢 -c
它看起来像XElement
内容 - 如果不空 - 不能是空的XML元素。换句话说,在您的示例中,您将无法序列化中的 XML,这些XML来自Report
类的内存中表示/实例。
这就是我得出的结论,我已经与该XML的提供者交谈以删除空元素 – CaffGeek 2010-02-04 17:21:10
这看起来像是一种症状,不能正确地序列化XML中的XML第一种情况,这很可能是使用.NET 1.0 XmlSerializer完成的。为了正确地序列化'minOccurs =“0”'元素(例如XML中不应该存在的元素),你需要在类中使用'bool ParameterTemplateSpecified'元素。请参阅http://stackoverflow.com/questions/2330001/xml-serialization-render-empty-element/2541396#2541396 – 2011-03-03 09:55:09
您可以在报表类上实现IXmlSerializable
接口并覆盖ReadXml和WriteXml方法。
使用ISNULLABLE =真
[XmlType(TypeName = "Report")]
public class Report
{
[XmlElement("ReportID")]
public int ID { get; set; }
[XmlElement("ParameterTemplate", IsNullable=true)]
public XElement ParameterTemplate { get; set; }
}
正如上面的评论中所提到的,这不*工作。 – CaffGeek 2010-02-04 19:52:00
我创建了下面的方法来修补XML文本:
Public Function XMLReaderPatch(rawXML As String) As String
If String.IsNullOrEmpty(rawXML) Then Return rawXML
'Pattern for finding items similar to <name*/> where * may represent whitespace followed by text and/or whitespace
Dim pattern As String = "<(\S+)(\s[^<|>]*)?/>"
'Pattern for replacing with items similar to <name*></name> where * may represent whitespace followed by text and/or whitespace
Dim replacement As String = "<$1$2></$1>"
Dim rgx As New Text.RegularExpressions.Regex(pattern)
Return rgx.Replace(rawXML, replacement)
End Function
出于兴趣,它正常工作,如果它是' ParameterTemplate> '? –
2010-02-04 16:46:01
不,但完全删除它允许它序列化。 – CaffGeek 2010-02-04 16:57:05
你想要在你的XML文件中存储一个'XElement'到底是什么?似乎有点奇怪...... – 2010-02-04 17:10:57