它接缝像有没有“魔术”或任何东西。 我必须序列化/反序列化类“老式的方式”。
如果你有兴趣,这里的解决方案:
我创建了一个“根” - 接口,在这个例子中是IModule的。 此IModule只包含1个名为Name的属性。 这是一个字符串,只有在那里为了方便:
该例的IFormChecker会从这个接口派生: 我的客户知道这个名称属性界面本身,当然还有价值。 它现在会将名称值激发到服务器,它将返回序列化的类。
所有我需要做的就是:
var module = ModuleImplementations.FirstOrDefault(x => x.Name == name);
if(module == null) throw new SomeException();
return module.Serialize();
客户明智的,我可以反序列化,并将其转换为界面。而已。
这里是我的ModuleSerialization级:
public static class ModuleSerialization
{
public static string Serialize(this IModule m)
{
using (var ms = new MemoryStream())
{
var bf = new BinaryFormatter();
bf.Serialize(ms, m);
return Convert.ToBase64String(ms.ToArray());
}
}
public static T Deserialize<T>(string serialized) where T : class, IModule
{
var ba = Convert.FromBase64String(serialized);
using (var s = new MemoryStream(ba))
{
var bf = new BinaryFormatter();
return bf.Deserialize(s) as T;
}
}
}
干杯!