我在使用预编译的protobuff序列化程序类ModelSerializer
序列化的字节数组中成功反序列化时遇到了困难。使用它,我定义的数据模型MyData
中的类的序列化和反序列化在我序列化到文件并从文件反序列化为MyData
时起作用。
但是,我有另一个要求,即将MyData
序列化为字节数组,并将字节数组反序列化为MyData
。下面是名为MyDataConverter
的基本类,它有2个静态方法,一个用于将MyData
转换为字节数组,另一个用于将字节数组转换为MyData
。
我可以成功将MyData
序列化为字节数组并将其写入MemoryStream
。但是,当我反序列化字节数组时,我确实获得了MyData
的非空实例,但其中的所有数据都丢失了(自定义类型的默认值为零或null
)。
public class MyDataConverter
{
public static byte [] MyDataToBytes (MyData myData)
{
MemoryStream stream = new MemoryStream();
ModelSerializer serializer = new ModelSerializer();
serializer.Serialize (stream, myData);
byte [] bytes = stream.ToArray();
Stream.Close();
return bytes;
}
public static MyData BytesToMyData (byte [] bytes)
{
MyData myData = null;
MemoryStream stream = new MemoryStream();
stream.Write (bytes, 0, bytes.Length);
ModelSerializer serializer = new ModelSerializer();
myData = (MyData) serializer.Deserialize (stream, myData, typeof (MyData));
stream.Close();
return myData;
}
}
答案 0 :(得分:10)
这是问题所在:
MemoryStream stream = new MemoryStream();
stream.Write (bytes, 0, bytes.Length);
ModelSerializer serializer = new ModelSerializer();
myData = (MyData) serializer.Deserialize (stream, myData, typeof (MyData));
当您尝试反序列化时,您仍然位于流的 end 。您可以在之后寻找开头,但更改代码以将字节数组传递给构造函数会更简单:
MemoryStream stream = new MemoryStream(bytes, false);
ModelSerializer serializer = new ModelSerializer();
myData = (MyData) serializer.Deserialize (stream, myData, typeof (MyData));
答案 1 :(得分:-1)
我们可以将像List这样的对象列表作为输入传递给序列化器。