Интерфейсы расширения Protobuf-net - PullRequest
1 голос
/ 20 ноября 2011

У меня проблемы с пониманием расширений 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, но я полагаю, что это не так.

Может кто-нибудь объяснить, что я делаю неправильно, или хотя бы как использовать приложенные данные?

...