当前位置:  开发笔记 > 前端 > 正文

具有不同汇编版本的二进制反序列化

如何解决《具有不同汇编版本的二进制反序列化》经验,为你挑选了3个好方法。

我有一个项目使用BinaryFormatter序列化字符串和bool的结构集合?数据类型.

序列化/反序列化工作正常,但是如果我要更改执行工作的程序集,则无法反序列化,因为二进制文件中的标头指示它需要Assembly x而不是Assembly y处理数据.

是否可以将序列化/反序列化设置为与程序集无关?



1> SteinNorheim..:

您可以通过将自定义SerializationBinder分配给格式化程序来控制二进制格式化程序如何解析其类型.通过这种方式,您不需要混淆AppDomain的解决事件,并消除了由此产生的意外副作用的风险.

MSDN上有一个详细的例子.



2> 小智..:

您可以更改BinaryFormatter属性AssemblyFormat以使序列化独立于程序集版本.

// Example
var binFormat = new BinaryFormatter();
binFormat.AssemblyFormat = System.Runtime.Serialization.Formatters.FormatterAssemblyStyle.Simple;



3> Chris Ballan..:

挂钩AppDomain.OnAssemblyResolve事件并修复程序集名称

private System.Reflection.Assembly OnAssemblyResolve( System.Object sender, System.ResolveEventArgs reArgs )
{
     foreach( System.Reflection.Assembly assembly in System.AppDomain.CurrentDomain.GetAssemblies() ) 
     {
         System.Reflection.AssemblyName assemblyName = assembly.GetName();
         if( assemblyName.FullName == reArgs.Name ) 
         {
              return( assembly );
         }
     }
}

来源:http://osdir.com/ml/windows.devel.dotnet.clr/2003-12/msg00441.html

推荐阅读
牛尾巴2010
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有