C#XmlSerializer BindingFailure

Ste*_* H. 46 .net c# visual-studio-2008 xmlserializer

我使用XmlSerializer在一行代码上得到一个BindingFailure:

XmlSerializer s = new XmlSerializer(typeof(CustomXMLSerializeObject));
Run Code Online (Sandbox Code Playgroud)

具有显示名称CustomXMLSerializeObject.XmlSerializers'的程序集无法加载到ID为1的AppDomain的"LoadFrom"绑定上下文中.失败的原因是:System.IO.FileNotFoundException:无法加载文件或程序集XMLSerializeObject.XmlSerializers,Version = 1.4.0.0,Culture = neutral,PublicKeyToken = null'或其依赖项之一.该系统找不到指定的文件.

错误很长,继续解释预绑定状态信息以及它试图找到文件的位置.

我试图去序列化的自定义对象相对简单 - 只是一堆私有整数和具有公共访问器的字符串.我有一个私有变量,它是另一个自定义的可序列化类,但它只有私有字符串,其中包含公共访问器.

尴尬的部分?这只在我反序列化时发生.当我序列化对象时,那行代码运行正常.它工作正常,对象被反序列化并完美填充.不要注意任何性能损失或加载时间过长.

这个警告究竟是什么(不是错误或异常,之后程序运行良好)?为什么会这样?如何在不简单禁用警告的情况下阻止它?

SwD*_*n81 60

根据Strange XmlSerializer错误:

此异常是XmlSerializer正常操作的一部分.它是预期的,将在Framework代码中捕获和处理.只需忽略它并继续.如果在调试期间困扰您,请将Visual Studio调试器设置为仅停止未处理的异常而不是所有异常.

它可能是由您选择监控的例外情况引起的.

你能告诉我你的异常是如何设置的:Debug - > Exceptions

如果取消选中Managed Debugging Assistants下BindingFailure的"Thrown"复选框,则异常应该消失.或者如果你不想这样做,你可以继续,因为这个例外是设计的

  • Le叹息......是的,我确实将它们发送给它们,以便在调试时抛出它们.我想我只是说,异常处理被用作控制替代的流程. (6认同)
  • 对不起,但我不能接受关闭通知,以解决被告知出错的问题.如果通知不是那么相对温和,但会导致意外行为,甚至是原因不明的崩溃,该怎么办?不需要.需要做的是找出为什么会发生这种情况并在那里处理它,而不是忽略它并希望其他一切都会好的.请参阅下面的答案. (3认同)

Lin*_*ang 39

使用以下方法构造xmlSerializer实例将解决问题:

XmlSerializer s = XmlSerializer.FromTypes(new[] { typeof(CustomXMLSerializeObject) })[0];
Run Code Online (Sandbox Code Playgroud)

那么,您不需要关闭异常处理.

  • 是的,这会有效但需要付出代价!性能! (2认同)