我正在与向我们发送 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 操作。