我目前正在为游戏创建登录系统。我使用ASP.NET MVC Web API 2来获取数据并将其传递给数据库。过程如下:
用户名和其他数据被写入WWWForm(Unity3d)。在这些数据中,有一个protobuf-net序列化对象传递给Convert.ToBase64String,如下所示:
using (MemoryStream ms = new MemoryStream())
{
Serializer.Serialize(ms, data);
return Convert.ToBase64String(ms.GetBuffer(), 0, (int)ms.Length);
}
发送的数据(在该特定字段中)为:CgkKAUMSAWMaAWMaACICIAoqAhAB
在执行Convert.FromBase64String()之后,发送的数据将存储到具有列类型varbinary的MS SQL Server数据库中。看起来像这样:0x0A090A01411201611A01611A002202200A2A021001
将数据作为Convert.ToBase64String()发回(通过HTTP响应)。
该数据与发送数据完全一样:CgkKAUMSAWMaAWMaACICIAoqAhAB
收到数据后,会尝试对其进行反序列化:
using (MemoryStream ms = new MemoryStream(Convert.FromBase64String(serverResponse)))
{
return Serializer.Deserialize<User>(ms);
}
但是,转换失败并告诉我长度无效,即使长度为28,我做错了什么?
答案 0 :(得分:1)
哎呀,我找到了导致错误的原因。响应如下:
"CgkKAUMSAWMaAWMaACICIAoqAhAB"
我认为Unity显示引号内的响应,但响应实际上有引号。所以这是修复:
serverResponse = serverResponse.Replace("\"", "");
using (MemoryStream ms = new MemoryStream(Convert.FromBase64String(serverResponse)))
{
return Serializer.Deserialize<User>(ms);
}