我尝试使用BinaryFormatter
带有一个公共字段(字符串)的类,但是,另一个应用程序中的相同类无法反序列化它。
如果可能,我希望该类包含其自身类型(递归)的字段,但如果不是 - string
s、int
s 和byte
数组是最重要的。
我尝试使用BinaryFormatter
带有一个公共字段(字符串)的类,但是,另一个应用程序中的相同类无法反序列化它。
如果可能,我希望该类包含其自身类型(递归)的字段,但如果不是 - string
s、int
s 和byte
数组是最重要的。
如果您不能在应用程序之间共享一个类库,您可以在客户端(消费者)应用程序中创建一个镜像类,并将其所有属性映射到“初始”类的属性+一些辅助信息。这将是您的代理类。然后,您应该控制反序列化过程。例如,使用 xml 来保存数据。如果安全性至关重要,您可以加密文件的内容并在应用程序之间共享公钥。
BinaryFormatter 将在输出中包含完整的类型名称(包括程序集和命名空间)。您需要使用自定义 SerializationBinder 来读取它:
public class CustomBinder : SerializationBinder
{
static string assemblyToUse = typeof (MyObject).Assembly.FullName;
public override Type BindToType(string assemblyName, string typeName)
{
if (typeName.EndsWith("MyType"))
return typeof(MyTypeInThisAssembly);
return base.BindToType(assemblyName, typeName);
}
}
var formatter = new BinaryFormatter{Binder = new CustomBinder()};
var obj = formatter.Deserialize(...)
这样做的缺点是必须在每个程序集中包含 CustomFormatter 的代码,我猜这不是你想要的。这可能会让您不得不使用自定义格式输出(如JSON或协议缓冲区)