当前位置: 首页 > 编程语言 > C#

如何让BinaryFormatter在不同的应用程序中反序列化Share

时间:2023-04-10 13:08:16 C#

如何在不同的应用程序中让BinaryFormatter反序列化我可以在同一个应用程序中反序列化它。当我在不同的应用程序中尝试相同的反序列化(引入一个完成工作的公共文件)时,我收到以下错误:{“无法加载文件或程序集'pmlscan,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null'或其依赖项之一。该模块应包含程序集清单。"}其中pmlscan是原始应用程序的名称。如何使BinaryFormatter不尝试加载pmlscan?您可以使用自定义SerializationBinder来实现它。请参阅此处:高级二进制序列化:将对象反序列化为与序列化对象不同的类型二进制序列化程序将类和程序集信息编码为二进制数组。反序列化此数组时,反序列化程序使用此信息来查找类所在的程序集,并(如有必要)将程序集加载到您的应用程序域中。如果其他应用程序无法访问类类型所在的程序集,那么您将看到您收到的错误。正如另一张海报所提到的,将这些公共类放入共享程序集中并将它们部署到客户端/其他应用程序以及服务器应用程序。如果类相同,并且它只是另一个程序集,您可以尝试将assemblyBinding部分添加到您的.config文件中。您还应该阅读有关解析程序集加载和TypeResolve事件的文章。使用这些技术,您可以在反序列化时将.Net类型系统重定向到另一种类型。注意:将共享类迁移到共享.dll将是一个更简单的解决方案。密封类PreMergeToMergedDeserializationBinder:SerializationBinder{publicoverrideTypeBindToType(stringassemblyName,stringtypeName){returnType.GetType("BinarySerialization.YourClass");}}BinaryFormatterbfDeserialize=newBinaryFormatter();bfDeserialize.Binder=newPreMergeToMergedDeserializationBinder();while(fsRead.Position假设你有一个exe序列化你的“YourClass”中的数据,另一个exe序列化你的YourClass对象。你不能!你最好的选择是在一个单独的程序集中发布可序列化的类,并在server(serializer)和client(deserializer)。这样你就不用把整个源码对外公布了。以上是C#学习教程:HowtomakeBinaryFormatterindifferentapplications反序列化中共享的所有内容,如果它对你有用,需要了解更多C#学习教程,希望大家多多关注---本文收集自网络,不代表立场,如涉及侵权,请点击右转联系管理员删除,如需转载请注明出处: