Ist*_*tel 5 .net c# binaryformatter
我BinaryFormatter用来存储我的应用程序设置.现在,经过几年的持续开发,在许多用户已经在使用我的应用程序之后,我想要更改几个类的命名方式以及它们所在的命名空间.但是,如果我这样做,则无法再加载设置,因为BinaryFormater它们通过其代码内名称调用.
因此,例如,如果我更改MyNamespace.ClassOne为MyNamespace.Class.NumberOne代码,我将无法再加载设置,因为MyNamespace.ClassOne不再存在.
我想要进行此更改并允许用户保留其设置文件.这可能吗?
我的意思是,我想我可以研究它保存的格式,并手动更改二进制文件,替换类名,但这将是黑客的方法.必须有一个正常的方法,对吗?
Bar*_*zKP 10
对的,这是可能的.你可以使用这SerializationBinder门课.像这样的东西:
public class ClassOneToNumberOneBinder : SerializationBinder
{
public override Type BindToType(string assemblyName, string typeName)
{
typeName = typeName.Replace(
"MyNamespace.ClassOne",
"MyNamespace.Class.NumberOne");
assemblyName = assemblyName.Replace("MyNamespace", "MyNamespace.Class");
return Type.GetType(string.Format("{0}, {1}", typeName, assemblyName));
}
}
BinaryFormatter binaryFormatter = new BinaryFormatter();
binaryFormatter.Binder = new ClassOneToNumberOneBinder();
Run Code Online (Sandbox Code Playgroud)
代码示例改编自此答案.
| 归档时间: |
|
| 查看次数: |
1112 次 |
| 最近记录: |