4

我在成功反序列化已使用预编译的 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;
    }
}
4

2 回答 2

10

这就是问题:

MemoryStream stream = new MemoryStream();
stream.Write (bytes, 0, bytes.Length);

ModelSerializer serializer = new ModelSerializer();
myData = (MyData) serializer.Deserialize (stream, myData, typeof (MyData));

当您尝试反序列化时,您仍然处于流的末尾。之后您可以从头开始,但更改代码以将字节数组传递给构造函数会更简单:

MemoryStream stream = new MemoryStream(bytes, false);        
ModelSerializer serializer = new ModelSerializer();
myData = (MyData) serializer.Deserialize (stream, myData, typeof (MyData));
于 2013-02-21T16:08:08.910 回答
-1

我们可以将像 List 这样的对象列表作为输入传递给序列化器吗?

于 2016-05-20T19:02:44.280 回答