我正在托管 API,客户端将由其他人构建并使用我的 API。 但是在测试时,我在客户端项目中反序列化时遇到了异常。
System.Runtime.Serialization.SerializationException:无法找到程序集“Gateway,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null”
我想在 API 中给出响应时传递加密对象。所以首先我将其序列化然后加密。因此,在反序列化时,我遇到了上述错误。 服务器上的代码
BinaryFormatter formatter = new BinaryFormatter();
using (MemoryStream ms = new MemoryStream())
{
formatter.Serialize(ms, obj);
return ms.ToArray();
}
请不要使用 BinaryFormatter,它在各个方面都很糟糕。它缓慢、不安全且不灵活。由于上述原因,也已过时。
我对 BinaryFormtter 的理解是,它基本上只是将对象的内存表示转储到文件。这意味着任何改变此表示的行为都会破坏序列化。包括
您的错误很可能表明在客户端上找不到序列化类
Gateway
。仅仅将类定义复制到您的客户端项目(就像对大多数序列化库所做的那样)是不够的。您至少需要确保命名空间完全匹配,并且引用用于序列化的完全相同的 dll 可能会更容易。
但是请使用合理的序列化器。 Json 是最流行的替代方案,如果您担心空间问题,可能会与压缩结合使用。如果您想要二进制序列化,protobuf .net 是一个不错的选择。但还有很多可供选择,这些只是我最有经验的。