对于此方法XmlSerializer.Deserialize
,可以引发什么类型的异常? XmlException
? InvalidOperationException
?我没有从该方法中找到任何异常描述信息。我的问题是这种方法会引发哪种异常?
http://msdn.microsoft.com/en-us/library/dsh84875.aspx
我正在使用VSTS2008 + C#+ .Net。
提前致谢,
乔治
最佳答案
看起来主要像InvalidOperationException
。
如果您仔细阅读每个重载的文档,它将为您提供更多详细信息。例如,参见 XmlSerializer.Deserialize Method (XmlReader)
InvalidOperationException
将在其InnerException
属性中包含有关特定错误的更多详细信息。
编辑:
XmlSerializer.Deserialize Method (XmlSerializationReader)
可以抛出NotImplementedException
,但是它是一个内部API,并不意味着您的代码可以使用它,因此不必担心。
编辑2:
这段代码:
var ms = new System.IO.MemoryStream();
var deser = new System.Xml.Serialization.XmlSerializer(typeof(string));
deser.Deserialize(ms);
抛出:
System.InvalidOperationException: There is an error in XML document (0, 0). ---
System.Xml.XmlException: Root element is missing.
at System.Xml.XmlTextReaderImpl.Throw(Exception e)
... <snip> ...
因此,看起来框架似乎总是会抛出
InvalidOperationException
。真的,除非您担心会错误地捕获像
ThreadAbortException
这样的异常,否则您可能最安全地捕获所有异常...编辑3:
使用Reflector:
Deserialize(stream)
方法使用XmlTextReader
读取流并调用 XmlSerializer.Deserialize Method (XmlReader, String)
。该方法会在出错时抛出InvalidOperationException
(根据文档)。编辑4:
如果
Deserialize(stream)
为null,则NullReferenceException
也可以引发stream
,因为它调用 XmlTextReader(Stream)
构造函数。