FromBase64String无效长度错误

时间:2015-06-24 18:09:02

标签: c# protobuf-net

我目前正在为游戏创建登录系统。我使用ASP.NET MVC Web API 2来获取数据并将其传递给数据库。过程如下:

  1. 用户名和其他数据被写入WWWForm(Unity3d)。在这些数据中,有一个protobuf-net序列化对象传递给Convert.ToBase64String,如下所示:

    using (MemoryStream ms = new MemoryStream())
    {
        Serializer.Serialize(ms, data);
        return Convert.ToBase64String(ms.GetBuffer(), 0, (int)ms.Length);
    }
    
  2. 发送的数据(在该特定字段中)为:CgkKAUMSAWMaAWMaACICIAoqAhAB

    1. 在执行Convert.FromBase64String()之后,发送的数据将存储到具有列类型varbinary的MS SQL Server数据库中。看起来像这样:0x0A090A01411201611A01611A002202200A2A021001

    2. 将数据作为Convert.ToBase64String()发回(通过HTTP响应)。

    3. 该数据与发送数据完全一样:CgkKAUMSAWMaAWMaACICIAoqAhAB

      收到数据后,会尝试对其进行反序列化:

      using (MemoryStream ms = new MemoryStream(Convert.FromBase64String(serverResponse)))
      {
           return Serializer.Deserialize<User>(ms);
      }
      

      但是,转换失败并告诉我长度无效,即使长度为28,我做错了什么?

1 个答案:

答案 0 :(得分:1)

哎呀,我找到了导致错误的原因。响应如下:

"CgkKAUMSAWMaAWMaACICIAoqAhAB"

我认为Unity显示引号内的响应,但响应实际上有引号。所以这是修复:

serverResponse = serverResponse.Replace("\"", "");

using (MemoryStream ms = new MemoryStream(Convert.FromBase64String(serverResponse)))
{
     return Serializer.Deserialize<User>(ms);
}