首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何解决C#中BinaryFormatter反序列化第三方对象异常?

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

Stack Overflow用户
提问于 2020-05-12 19:48:18
回答 1查看 128关注 0票数 1

在我的项目中,我有一个用于从文件加载对象的函数:

代码语言:javascript
复制
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;
}

每次运行此函数时,我都会遇到异常:

代码语言:javascript
复制
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)

有谁有主意吗?我真的很感谢你的帮助!

EN

回答 1

Stack Overflow用户

发布于 2020-07-08 18:53:12

在尝试使用以下代码行加载vpp文件(cognex)时,我也遇到了同样的问题。

代码语言:javascript
复制
cogJobManager = CogSerializer.LoadObjectFromFile(jobFilesPath) as CogJobManager;

我的解决方案是在Build选项卡下的项目属性中取消选中“首选32位”,并将其编译为任意CPU

在那之后问题就解决了

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61750936

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档