問題タブ [protobuf-net]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - プロトコル バッファ (protobuf-net、protobuf-csharp) の繰り返しフィールドに生のシリアル化された値を追加します。
オブジェクトのシリアライズされた値 (byte[]) をプロトコル バッファ メッセージの繰り返しフィールドに追加する方法を探しています。
memcached でシリアル化された形式でデータ項目を保持し、それらをリモート クライアントに配信する必要があるアプリケーションがあります。クライアントはキーのリストを提供してデータ項目を要求し、サーバーはデータ項目のリストを送り返します。データ項目の内容はサーバーにとって重要ではありません。それらに何が含まれているかを知る必要はなく、それらのキーを知る必要があるだけです。
現在のアプローチは、memcached から項目をフェッチし、それらを逆シリアル化し、それらを応答のデータ項目のリストに追加し、応答をバイト配列にシリアル化し、ソケット経由で送信することです。データ項目を逆シリアル化して、次のステップで再度シリアル化するため、これは最適ではありません。シリアル化 (memcached 用と出力用) は両方とも、プロトコル バッファーを使用して行われます。理想的には、memcached からデータを取得した後にシリアル化解除をスキップし、シリアル化された値を応答に追加できます。protobuf-net と protobuf-csharp の両方を調べましたが、これを達成する方法が見つかりませんでした。出来ますか?私は何かを見落としましたか?
プロト定義は次のとおりです(簡略化):
protobuf-net - protobuf-net コレクションを既存のファイルにマージする
protobuf-net を使用してコレクションをファイルにシリアル化しました。
さらにいくつかのアイテムを既存のファイルにマージする方法を探しています。
現在、私はこれを持っています:
しかし、うまくいきません。何か案は?
protocol-buffers - Protobuf、バイナリでカスタム バージョンの詳細を追加する方法
各 protobuf シリアル化データに独自のバージョン番号をタグ付けしたいと考えています。必要に応じて、データのシリアル化に使用されたバージョンを確認できます。protobuf はアイデアに基づいて設計されているため、バージョンを確認する必要はありません。
これを行うには、.net シリアライゼーションで行ってきたのと同じ方法を使用して、バージョン フィールドを追加します。
これがprotobufでも推奨される方法であることを確認したいだけです。
また、protobuf-net で上記のように行う必要がありますか? クラスが非サイラル化されている場合にオーバーライドされるコンストラクターでバージョンを割り当てます。新しいオブジェクトをシリアル化するには、バージョン 1 を使用します。
c# - protobuf-net が適切でないシナリオはどれですか?
C# アプリで BinarySerialization を使用していますが、シリアル化する必要があるクラスのサイズと複雑さにより、シリアル化が遅くなり、ファイルが大きくなります。
独自のカスタム シリアライザーを作成するだけでよいのではないかと考えています。しかし、protobuf-net は、標準の .Net バイナリ シリアライゼーションよりも速度とサイズが大幅に優れていると主張しており、多数の特注のシリアライザーよりも簡単にアプリに追加できる可能性があります。
私たちのためにそれを機能させるためにかなりの時間と労力を費やす前に、契約を破るものがないかどうか知りたい. インターフェイス、抽象サブクラスのジェネリック リスト、カスタム ビット フラグ列挙型などで定義されたプロパティを使用しています。
c# - protobuf-netとインターフェースのサポート
この質問の大部分はprotobuf-netのメンテナに直接送られますが、他の人はコメントしてください。
インターフェイスタイプを持つプロパティを含むクラスをシリアル化しようとしました。つまり、次のようになります。
protobuf-netのv1のソースを変更することで、これを機能させることができました。インターフェイスにProtoIncludeが定義されている限り、このアプローチに問題はありませんでした。
明らかにこれをコンパイルするには、ProtoContractとProtoIncludeをインターフェイスに装飾することを許可する必要がありました。さらに、あちこちでいくつかの変更を加える必要がありました。(注:DataContract / KnowTypeを使用しますが、これらの属性はインターフェイスで装飾することもできません)
考えられる欠点についてコメントしていただけますか?
c++-cli - protobuf-netはsbyteの配列を逆シリアル化しません
私はC++/CLIで次のように定義されたクラスを持っています:
デバッグ中に、シリアライザーがデータをそのままにしてバッファープロパティから値を取得しているのを確認できます。デシリアライザーを実行すると、データがバッファープロパティにプッシュされますが、シリアル化前に存在していたデータの代わりに、配列が0で埋められます。ProtoMember属性でIsRequired=trueを設定しようとしましたが、うまくいきませんでした。
正常に逆シリアル化されているsbyte配列で定義された他のメッセージがあります。ただし、これらのアレイは非常に短いです(最大10)。ここで私が目立つのは、この配列の長さだけです。ヘルプ!:-)
編集:私はv1r282を使用していることにも言及する必要があると思います。
protobuf-net - Protobuf-Net:GUIDをシリアル化する方法は?
protobuf-net で Guid をシリアル化するための推奨される方法はありますか? サポートされているタイプではないようですか?
wcf - net.msmqを介したprotobuf-netでこの問題を見た人は誰でも
protobuf-netを使用してwcfnet.msmqを介して大きなメッセージを送信し、次のエラーが発生するという問題が発生しています。
フォーマッタは、メッセージの逆シリアル化を試みているときに例外をスローしました:操作'DeliverData'の要求メッセージの本文の逆シリアル化中にエラーが発生しました。終了要素'proto'from namespace'http ://mynamespace 'が必要です
メッセージサイズが16k未満の場合、機能します
protobuf-netを削除すると、機能します
basichttpに切り替えると、機能します
しかし、protobuf-netを使用してnet.msmqを介してメッセージサイズが16kを超えると、エラーが発生します。maxBufferPoolSizeとmaxReceivedMessageSizeを十分に大きく設定しましたが、役に立ちません。
他の誰かがこれを見たことがありますか?他の誰かが大きなメッセージにprotobuf-net+net.msmqを使用して、それを機能させましたか?
c# - Protobuf-net r282で、r249でシリアル化されたオブジェクトの逆シリアル化に問題があります
r249からr282にアップデートしました。dllを置き換える以外は、変更を加えていません。残念ながら、更新前に作成されたオブジェクトの逆シリアル化にはかなり時間がかかります。以前は2秒かかっていたものが、今では5分かかります。
バージョン間で構文に変更はありましたか?サポートされなくなったものはありますか?
私のクラスはすべてProtoContract、ProtoMember、およびProtoIncludeを使用しています。VS2010を実行しています。私に関する限り、プロトコルバッファコードに問題はありませんでした。最新バージョンがあればいいと思ったので、アップグレードしようとしています。
編集-2010.09.09私のオブジェクトのプロパティの1つは、ushortsの配列です。このプロパティがr282で正しくシリアル化/逆シリアル化されていないことに気づきました。配列の結果の値はすべてゼロです。配列には、シリアル化される前(r282)に値がありましたが、逆シリアル化された後(r282)にはありませんでした。
silverlight - Silverlight WCF 生成サービスで protobuf-net を使用する方法
WCF/Silverlight アプリケーションで protobuf-net を使用して、大きなオブジェクト配列のシリアル化のパフォーマンスを向上させようとしています。サービス コードでクラス (Order= などを追加) をシリアライズ/デシリアライズできます。
しかし、ProtoBehavior を適用して、Silverlight から protobuf 対応のサービス メソッドを呼び出そうとすると、データ (またはエラー) の代わりに null が返されます。
これは次の理由によると思います。
- ProtoBehavior は、Silverlight で生成されたサービス コードでは失われます。
- ドメイン クラス (型) は再利用されたアセンブリには含まれず、クライアントで再生成され、Order= が失われます。
ただし、現時点では両方の点を変更することはできません。(かなり大きな) プロジェクトをリファクタリングせずに protobuf-net を使用して、ASP.NET/Silverlight アセンブリをドメイン クラスなどと共有する方法はありますか?
他に解決策がない場合は、Reference.cs を調整して不足している動作と Order= を (perl/regex スクリプトを介して) 適切なメンバーに追加する方が簡単だと思いますが、正確には何を調整する必要があり、それは機能しますか?