我在 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; }
}
在调试时,我可以看到序列化程序从缓冲区属性中提取值,并且数据完好无损。当反序列化器运行时,我看到它将数据推送到缓冲区属性中,但是该数组填充了 0,而不是序列化之前存在的数据。我尝试在 ProtoMember 属性上设置 IsRequired = true ,但没有运气。
我有其他用 sbyte 数组定义的消息,这些消息可以很好地反序列化。但是,这些数组非常短(最多 10 个)。对我来说唯一突出的是这个数组的长度。帮助!:-)
编辑:我想我还应该提到我正在使用 v1 r282。