Nic*_*Ang 4 c# serialization protocol-buffers protobuf-net
我遇到了成功反序列化已使用预编译的protobuff序列化程序类序列化的字节数组的困难ModelSerializer.使用它,我定义的数据模型中的类的序列化和反序列化MyData在我序列化到文件并从文件反序列化时起作用MyData.
但是,我有另一个要求,即序列化为MyData字节数组,并将字节数组反序列化为MyData.下面是调用的基本类MyDataConverter,它有2个静态方法,一个用于转换MyData为字节数组,另一个用于转换字节数组MyData.
我可以MyData成功序列化到一个字节数组并将其写入MemoryStream.但是,当我反序列化字节数组时,我确实获得了一个非空实例MyData,但其中的所有数据都丢失了(默认null值为零,或者自定义类型的值).
我可以在这里出错吗?请注意,我确实使用类似的代码成功序列化到文件并从文件反序列化,所以它可能不是MyModel或预编译的ModelSerializer的错误.但如果有必要,我可以在这里粘贴一些信息.
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;
}
}
Run Code Online (Sandbox Code Playgroud)
Jon*_*eet 10
这就是问题:
MemoryStream stream = new MemoryStream();
stream.Write (bytes, 0, bytes.Length);
ModelSerializer serializer = new ModelSerializer();
myData = (MyData) serializer.Deserialize (stream, myData, typeof (MyData));
Run Code Online (Sandbox Code Playgroud)
当您尝试反序列化时,您仍然在流的末尾.您可以在之后寻找开头,但更改代码以将字节数组传递给构造函数会更简单:
MemoryStream stream = new MemoryStream(bytes, false);
ModelSerializer serializer = new ModelSerializer();
myData = (MyData) serializer.Deserialize (stream, myData, typeof (MyData));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3909 次 |
| 最近记录: |