在c#中在服务器项目中序列化并在客户端项目中反序列化时出现问题

问题描述 投票:0回答:1

我正在托管 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();
}
    
c# asp.net serialization tostring binaryformatter
1个回答
0
投票

请不要使用 BinaryFormatter,它在各个方面都很糟糕。它缓慢、不安全且不灵活。由于上述原因,也已过时。

我对 BinaryFormtter 的理解是,它基本上只是将对象的内存表示转储到文件。这意味着任何改变此表示的行为都会破坏序列化。包括

  • 类名或命名空间的更改
  • .Net 版本的更改(不是每个版本,但可以并且已经发生)
  • 任何属性的添加或删除。

您的错误很可能表明在客户端上找不到序列化类

Gateway
。仅仅将类定义复制到您的客户端项目(就像对大多数序列化库所做的那样)是不够的。您至少需要确保命名空间完全匹配,并且引用用于序列化的完全相同的 dll 可能会更容易。

但是请使用合理的序列化器。 Json 是最流行的替代方案,如果您担心空间问题,可能会与压缩结合使用。如果您想要二进制序列化,protobuf .net 是一个不错的选择。但还有很多可供选择,这些只是我最有经验的。

© www.soinside.com 2019 - 2024. All rights reserved.