【发布时间】:2013-01-05 01:27:29
【问题描述】:
我正在与向我们发送 XML 消息的第三方应用程序集成。他们的 XML 看起来像这样:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE theirObj SYSTEM "theirDTD-2.0.dtd">
<theirObj>
<properties>
<datasource>ThirdParty</datasource>
<datetime>2009-03-05T14:45:39</datetime>
</properties>
<data>
...
</data>
</theirObj>
我正在尝试使用 XmlSerializer 对其进行反序列化:
public theirObj Deserialize(string message) {
if( string.IsNullOrWhiteSpace( message ) ) {
throw new ArgumentNullException( "message" );
}
XmlSerializer xmlSerializer = new XmlSerializer( typeof(theirObj ) );
TextReader textReader = new StringReader( message );
using (XmlReader xmlReader = new XmlTextReader( textReader )) {
object deserializedObject = xmlSerializer.Deserialize( xmlReader );
theirObj ent = deserializedObject as theirObj ;
if (ent == null) {
throw new InvalidCastException("Unable to cast deserialized object to an theirObj object. {0}".FormatInvariant( deserializedObject));
}
return ent;
}
}
}
我使用 xsd.exe 生成了对象。
如果我删除 <!DOCTYPE> 标记,那么它可以很好地反序列化。
有没有办法让 XmlSerializer 忽略 <!DOCTYPE> 标记?
我知道我可以在将它传递给 XmlSerializer 之前将其删除,但如果我不需要,我宁愿不去那个级别的 XML 操作。
【问题讨论】:
-
去看看这个链接,它对我有用。 Solution
标签: c# doctype xmlserializer