我在理解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的流,但我想情况并非如此。
有人可以解释我做错了什么或者至少可以使用附加的数据吗?