看起来好像没有“魔术”或任何东西。我必须对“老式方式”类进行序列化/反序列化。
如果你有兴趣,这里是解决方案:
我创建了一个“根”接口,在这个例子中它是 IModule。此 IModule 仅包含 1 个属性,称为 Name。它是一个字符串,只是为了方便起见:
示例中的 IFormChecker 将派生自此接口:我的客户知道此 Name 属性的值,当然还有接口本身。它现在将 Name-value 触发到服务器,服务器将返回序列化的类。
我所要做的就是:
var module = ModuleImplementations.FirstOrDefault(x => x.Name == name);
if(module == null) throw new SomeException();
return module.Serialize();
客户端方面,我可以反序列化它并将其转换为接口。而已。
这是我的模块序列化类:
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;
}
}
}
干杯!