Serialization Protobuf网络扩展接口
我在理解protobuf网络扩展以及它们到底是如何工作的方面存在问题。我需要序列化一个2D自定义类数组,因此我决定将其封装到一个类中,如下所示:Serialization Protobuf网络扩展接口,serialization,protocol-buffers,protobuf-net,Serialization,Protocol Buffers,Protobuf Net,我在理解protobuf网络扩展以及它们到底是如何工作的方面存在问题。我需要序列化一个2D自定义类数组,因此我决定将其封装到一个类中,如下所示: class CustomData : IExtension { private CustomClass[,] data; public CustomClass this[int index_X, int index_Y] { get {
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
}
这当然是在一个自定义IEExtensible中,它有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()附加和写入的数据将被传输到原编写器的流中,但我认为情况并非如此
有人能解释一下我做错了什么,或者至少是如何使用附加的数据吗?这是v1还是v2?它应该在v1中工作。。。在v2中,扩展部分是极少数剩余的不完整部分之一(与GetProto一起)。正在进行中…这是v2,我想这可以消除它。我将尝试另一种方法。谢谢你的帮助。这是非常短期的路线图;问题是:我每天都有有限的时间