对于此方法XmlSerializer.Deserialize,可以引发什么类型的异常? XmlExceptionInvalidOperationException?我没有从该方法中找到任何异常描述信息。我的问题是这种方法会引发哪种异常?

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) 构造函数。

09-07 00:30