这是我得到的错误..
http://i.imgur.com/VWTa4Mf.png
这是我的代码..
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
namespace LoginServer
{
[Serializable]
class MessageData
{
public int type = 0;
public string stringData = "";
public static MessageData FromByteArray(byte[] input)
{
MemoryStream stream = new MemoryStream(input);
BinaryFormatter formatter = new BinaryFormatter();
MessageData data = new MessageData();
data.type = (int)formatter.Deserialize(stream);
data.stringData = (string)formatter.Deserialize(stream);
if (data.stringData == "")
{
data.type = 999;
data.stringData = "No command included";
}
return data;
}
public static byte[] ToByteArray(MessageData msg)
{
MemoryStream stream = new MemoryStream();
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(stream, msg.type);
formatter.Serialize(stream, msg.stringData);
return stream.ToArray();
}
}
}
真的不确定为什么我不能把这个演员用作int ..
我花了很多时间来解决这个问题,即使使用const int,但这并不能解决问题。
将type设置为int,data为MessageData,因此int应该可以正常工作....
请帮忙。
答案 0 :(得分:2)
你应该替换你所做的演员:
data.type = (int)formatter.Deserialize(stream);
data.stringData = (string)formatter.Deserialize(stream);
使用以下内容:
data = (MessageData)formatter.Deserialize(stream);
因为您应该反序列化它的对象应该是MessageData
类型。此外,您还必须更改以下内容:
formatter.Serialize(stream, msg.type);
formatter.Serialize(stream, msg.stringData);
用这个:
formatter.Serialize(stream, msg);
通常我们序列化一个对象,然后我们反序列化结果以获得原始对象。我们不会单独序列化objet的每个属性,然后分别反序列化它们。
对于基本的序列化方法,请求查看here。