XmlSerializer.Deserialize方法可以抛出哪些类型的异常?

Geo*_*ge2 17 .net c# serialization xml-serialization

对于这种方法,XmlSerializer.Deserialize可能抛出什么样的异常?XmlExceptionInvalidOperationException?我没有从这个方法中找到任何异常描述信息.我的问题是这种方法可以抛出什么样的异常?

http://msdn.microsoft.com/en-us/library/dsh84875.aspx

我使用的是VSTS2008 + C#+ .Net.

乔治,提前谢谢

Nad*_*zie 20

看起来主要是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);
Run Code Online (Sandbox Code Playgroud)

抛出:

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> ...
Run Code Online (Sandbox Code Playgroud)

所以看起来框架总是会抛出一个InvalidOperationException.

真的,除非你担心错误地捕捉异常,否则你ThreadAbortException可能最安全地捕捉所有异常......

编辑3:

使用Reflector:该Deserialize(stream)方法使用a读取流XmlTextReader并调用XmlSerializer.Deserialize Method (XmlReader, String).该方法会引发InvalidOperationException错误(根据文档).

编辑4:

Deserialize(stream)也可以抛出一个NullReferenceExceptionif stream为null,因为它调用XmlTextReader(Stream)构造函数.


Flá*_*van 7

XmlSerializer的例外情况

诊断这些问题的根源一开始可能很棘手,因为XmlSerializer的例外似乎并没有提供关于它们出现原因的大量信息; 至少,他们不会在开发人员通常会看到的地方提供信息.

在大多数情况下,Serialize,Deserialize甚至XmlSerializer构造函数System.InvalidOperationException 在发生错误时抛出相当通用的东西.此异常类型可能出现在.NET Framework中的许多位置; 它根本不是特定于XmlSerializer的.更糟糕的是,异常的Message属性也只产生非常通用的信息.

有关XmlSerializer中的异常的这个和其他非常方便的提示可以在文档疑难解答XmlSerializer的常见问题中找到.