Protobuf-net扩展接口

时间:2011-11-19 21:26:02

标签: serialization protocol-buffers protobuf-net

我在理解protobuf-net扩展以及它们如何正常工作时遇到了问题。我需要序列化一个2D自定义类数组,因此我决定将它包装成类似于:

的类
class CustomData : IExtension
{
     private CustomClass[,] data;
     public CustomClass this[int index_X, int index_Y]
      {
                get 
                {
                    return data[index_X, index_Y];
                }
                set
                {
                    data[index_X, index_Y] = value;
                }
            }

        public Stream BeginQuery()
        {
            var stream = new MemoryStream();

            int pos = 0;
            byte[] packedData = SomeStaticClass.ConvertToByteArray(data)

            using(var writer = new ProtoWriter(stream, null, null))
            {
                ProtoWriter.WriteFieldHeader(1, WireType.String, writer);
                ProtoWriter.WriteBytes(packedData, writer);
            } 

            return stream;
        }

        public void EndQuery(Stream stream)
        {
            stream.Close();
        }

     //... and the other 3 implemented funcs from IExtension
}

所以这个当然是在一个自定义的IExtensible中,它有GetExtensionObject()返回一个CustomData对象的实例。当我尝试将扩展数据附加到实例时出现问题。这就是我正在做的事情:

public void DoAppend()
{
        var stream = new MemoryStream();

        using (ProtoWriter writer = new ProtoWriter(stream, null, null))
        {
            var test = new CustomExtensibleClass(300, 300);

            ProtoWriter.AppendExtensionData(test, writer);
        }

        var result = stream.ToArray();
}

问题是“结果”不包含任何数据。我期望通过BeginQuery()附加和写入的数据将被转移到ProtoWriter的流,但我想情况并非如此。

有人可以解释我做错了什么或者至少可以使用附加的数据吗?

0 个答案:

没有答案