提问人:Android Guy 提问时间:8/8/2023 最后编辑:dbcAndroid Guy 更新时间:8/8/2023 访问量:31
在 c 的服务器项目中序列化并在客户端项目中反序列化时的问题#
Issue while Serialized in server project and deserialized in client project in c#
问:
我正在托管 API,客户端将由其他人构建并使用我的 API。 但是在测试时,我在客户端项目中反序列化时出现以下异常。
System.Runtime.Serialization.SerializationException:找不到程序集“网关,版本 = 1.0.0.0,区域性 = 中性,PublicKeyToken=null”
我想在 API 中给出响应时传递加密对象。因此,首先我对其进行序列化,然后进行加密。因此,在绝望的同时,我得到了错误。 服务器上的代码
BinaryFormatter formatter = new BinaryFormatter();
using (MemoryStream ms = new MemoryStream())
{
formatter.Serialize(ms, obj);
return ms.ToArray();
}
答:
0赞
JonasH
8/8/2023
#1
请不要使用 BinaryFormatter,它几乎在各个方面都很糟糕。它缓慢、不安全和不灵活。并且由于上述原因也过时了。
我对 BinaryFormtter 的理解是,它基本上只是将对象的内存表示转储到文件中。这意味着任何更改此表示形式的内容都将中断序列化。包括
- 对类名或命名空间的更改
- 对 .Net 版本的更改(不是每个版本,但可以并且已经发生)
- 任何属性的添加或删除。
您的错误很可能表明在客户端上找不到序列化的类。仅仅将类定义复制到客户端项目(就像使用大多数序列化库一样)是不够的。您至少需要确保命名空间完全匹配,并且仅引用用于序列化的完全相同的 dll 可能会更容易。Gateway
但请改用理智的序列化程序。Json 是最受欢迎的替代方案,如果您担心空间,可能会与压缩结合使用。如果你想要二进制序列化,protobuf .net 是一个不错的选择。但是还有很多可供选择,这些只是我最有经验的。
评论
'Gateway
BinaryFormatter