У меня есть класс, определенный в C ++ / CLI:
literal Int32 BufferLength = 4000;
Message()
{
num1 = 0;
num2 = 0;
str1 = String::Empty;
buffer = gcnew array<System::SByte>(BufferLength);
};
[ProtoMember(1)]
property double num1
{
double get() { return _num1; }
void set(double value) { _num1 = value; }
}
[ProtoMember(2)]
property double num2
{
double get() { return _num2; }
void set(double value) { _num2 = value; }
}
[ProtoMember(3)]
property String^ str1
{
String^ get() { return _str1; }
void set(String^ value) { _str1 = value; }
}
[ProtoMember(4)]
property array<System::SByte>^ buffer
{
array<System::SByte>^ get() { return _buffer; }
void set(array<System::SByte>^ value) { _buffer = value; }
}
Во время отладки я вижу, как сериализатор извлекает значение из свойства буфера с тактовыми данными.Когда запускается десериализатор, я вижу, что он помещает данные в свойство буфера, однако массив заполняется нулями вместо данных, которые были там до сериализации.Я попытался установить IsRequired = true в атрибуте ProtoMember, не повезло.
У меня есть другие сообщения, определенные с массивами sbyte, которые хорошо десериализуются.Однако эти массивы довольно короткие (максимум 10).Единственное, что выделяется здесь для меня, это длина этого массива.Помогите!: -)
Редактировать: Думаю, я должен также упомянуть, что я использую v1 r282.