如何解决C#中BinaryFormatter反序列化第三方对象异常?

3
在我的项目中,有一个函数用于从文件中加载对象:
public static ObjectBase LoadObject(string _filePath, string _name)
{
    ObjectBase module = null;

    try
    {
        IFormatter formatter = new BinaryFormatter();
        Stream streamRead = new FileStream(_filePath, FileMode.Open, FileAccess.Read, FileShare.None);

        object ob = formatter.Deserialize(streamRead);
        module = (ob as ObjectBase);
        streamRead.Close();
    }
    catch (Exception ex)
    {
        return null;
    }
    finally
    {
    }
    return module;
}
每次运行这个函数时,我都会遇到异常:
System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.InvalidOperationException: Operation is not valid due to the current state of the object.
 at Cognex.VisionPro.Implementation.Internal.ccComFactory.CreateInstance()
 at Cognex.VisionPro.FGGigE.Implementation.Internal.CogAcqFifoGigE._com()
 at Cognex.VisionPro.FGGigE.Implementation.Internal.CogAcqFifoGigE..ctor(SerializationInfo info, StreamingContext context)

 --- End of inner exception stack trace ---

 at System.RuntimeMethodHandle.SerializationInvoke(IRuntimeMethodInfo method, Object target, SerializationInfo info, StreamingContext& context)
 at System.Runtime.Serialization.ObjectManager.CompleteISerializableObject(Object obj, SerializationInfo info, StreamingContext context)
 at System.Runtime.Serialization.ObjectManager.FixupSpecialObject(ObjectHolder holder) at System.Runtime.Serialization.ObjectManager.DoFixups()
 at System.Runtime.Serialization.Formatters.Binary.ObjectReader.Deserialize(HeaderHandler handler, __BinaryParser serParser, Boolean fCheck, Boolean isCrossAppDomain, IMethodCallMessage methodCallMessage)
 at System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize(Stream serializationStream, HeaderHandler handler, Boolean fCheck, Boolean isCrossAppDomain, IMethodCallMessage methodCallMessage)
 at System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize(Stream serializationStream)
 at My code file.

Message: "Operation is not valid due to the current state of the object." Source: "Cognex.VisionPro.FGGigE" StackTrace:
 at Cognex.VisionPro.Implementation.Internal.ccComFactory.CreateInstance()
 at Cognex.VisionPro.FGGigE.Implementation.Internal.CogAcqFifoGigE._com()
 at Cognex.VisionPro.FGGigE.Implementation.Internal.CogAcqFifoGigE..ctor(SerializationInfo info, StreamingContext context)

有人有想法吗?我非常感谢你们的帮助!


欢迎来到Stack Overflow。当尝试创建类型CogAcqFifoGigE的实例时出现错误。您能够访问该类型的源代码吗?您可以分享一下ccComFactory.CreateInstance方法的代码吗? - undefined
1个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
3

当我尝试使用以下代码加载vpp文件(Cognex)时,遇到了相同的问题:

cogJobManager = CogSerializer.LoadObjectFromFile(jobFilesPath) as CogJobManager;

对我来说,解决方案是在“生成”选项卡下的项目属性中取消选中“首选32位”,并将其编译为Any CPU。

之后问题得以解决。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,