以下代码引发异常。如果没有简单的答案或需要检查的内容,我会尝试生成一些可以重现错误的内容(尽管我不知道在哪里上传)。
public static XMLobj Load(string FileName)
{
if (File.Exists(FileName) == false)
{
return null;
}
IRDnet.XMLobj def;
XmlSerializer xmlser = new XmlSerializer(typeof(IRDnet.XMLobj));
System.IO.Stream stream = File.OpenRead(FileName);
object o = xmlser.Deserialize(stream);
// o appears to be of correct type in the quick watch.
IRDnet.XMLobj def2 = o as IRDnet.XMLobj;
// def2 is "undefined" (as operator rejected o)
def = (IRDnet.XMLobj)o;
// Throws InvalidCastException with no InnerException.
stream.Close();
return def;
}
奇怪的是,如果我在抛出异常之前中断,“o”似乎是正确的类型:
o {IRDnet.XMLobj} System.Object
并且该对象在快速监 window 口中转换得很好。值很容易检查。
它是从它所属的同一项目中执行的。因此,没有加载上下文。 仅供引用:静态方法是 XMLobj 类的一部分(如果相关的话)。 是否还有其他一些我不知道的成功选角标准?有隐式执行的代码吗?
我已经检查了反射器会生成等效的代码,以确保编译器优化中不会丢失任何内容。
各位,有什么线索吗?我很困惑。我什至希望仅仅写下这个问题就能让我对一些完全显而易见的事情三思而后行。
最佳答案
这可能是版本控制问题。也就是说,反序列化的 XMLobj
与您编译时使用的版本不同。检查每种类型的完全限定名称。
关于c# - 即使该对象在调试器中看起来具有正确的类型,as 运算符也会拒绝该对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1707127/