У меня проблемы с пониманием расширений protobuf-net и их работой.Мне нужно сериализовать двумерный пользовательский массив классов, и поэтому я решил обернуть его в класс примерно так:
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, но я полагаю, что это не так.
Может кто-нибудь объяснить, что я делаю неправильно, или хотя бы как использовать приложенные данные?