私は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)。ここで私が目立つのは、この配列の長さだけです。ヘルプ!:-)
編集:私はv1r282を使用していることにも言及する必要があると思います。