1

protobuf を使用してメッセージを送信する Java バックエンドがあります。区切りメッセージ オブジェクトを 1 つの大きなバイト配列 BLOB で tib 経由で送信します。Java で関数 parseDelimitedFrom(yourStreamHere) を使用して問題なくデシリアライズできますが、C# 側ではいくつかの問題があり、例が見つかりませんでしたが、ここで明らかな何かが欠けている可能性があります。

このようなC#で何かをしています

using (MemoryStream mem = new MemoryStream()) 
{ 
    mem.Write(byteArray, 0, byteArray.Length); 
    mem.Position = 0;     
    return Serializer.Deserialize<List<OrderState>>(mem); 
}

注:これに関する古い投稿を見ましたが、かなり古くなっているように見え、それ以来protobuf-netに変更が加えられたと思いますが、間違っていれば修正してください

4

1 に答える 1

1

開発者は昨日、ある時点でタグ 0 とプレフィックス スタイル 128 を使用していました。

IEnumerable<SomeObject> list =  (Serializer.DeserializeItems<SomeObject>(memoryStream, PrefixStyle.Base128, 0));

しかし、まだエラーが発生していました。本日 C# 側で getProto を呼び出したところ、double 型に設定されていたプロパティが fixed64 型に変換されているように見えました。Java 側では double を指定していたので、この不一致が原因でエラーが発生していたと思われます。これらのフィールドを一時的に文字列型に変更したため、上記のスニペットが機能するようになりました。もちろん、必要がないときに文字列を送信したくないのが理想的です。

于 2010-09-16T18:40:14.090 に答える