問題タブ [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: 空のリストのシリアル化
空のリストのシリアル化にはいくつかの問題があります。CF 2.0 を使用した .NET のコード
ストリームに書き込もうとすると例外が発生しました (bytes.length が範囲外)。しかし、空の List を持つ型は 0 バイトであってはなりませんよね (型情報?)?
応答にはクライアントへのサーバーからのメッセージがあるため、このタイプの送信が必要です。
c# - protobuf-net が 0 をデシリアライズしない
C# で protobuf-net r278 を使用していますが、int
フィールドを持つクラスがある場合、値が 0 に設定されているとフィールドが適切に逆シリアル化されないことに気付きました。つまり、逆シリアル化すると、デフォルト値が取得されます。クラス定義。クラスの例:
次に、次のコードを実行します。
これを行うと、0 ではなくとdeser
があります。ここで何か間違ったことをしていますか?Field1 = -1
Field2 = 2
c# - protobuf-net - C++ 側での逆シリアル化の問題 :(
.NET アプリケーションで ProtoBuf-Net を使用して、以下をシリアル化しています: (.proto 形式)
私の目的は、これをシリアル化し、単一のサンプルとして ASF ファイルに挿入することです。
私はこれをシリアライズするために呼び出します:
次に、ms オブジェクトからバイト配列を取得します。
このバイト配列を ASF に入れます。大きな問題は、ASF サンプルを正常に読み取る C++ アプリにあります。逆シリアル化しようとすると、メモリ アクセス違反が発生します :(
これは私のC++コードです:
(ここで、m_screenBuffer は ProtoScreenBuffer、serBuffer は ASF ファイルから取得した生のバイト配列、dwInputDataLen はその長さです。)
私がやろうとしていることに対して、ここで間違っていることはありますか (C# .NET でシリアル化し、C++ で逆シリアル化しますか?)
どうもありがとう。
ローイ
c# - protobuf-net を使用して現在のストリーム位置で型を逆シリアル化する
複数のオブジェクトを単一のストリームにシリアル化していますが、それらを読み戻そうとすると、最後のオブジェクト以外は何も取得できないようです:
最初のデシリアライズはストリームを最後に移動し、postA2 には postB1 の値が含まれますが、postB2 は初期化されていないインスタンスです。これは予期された動作ですか? また、そうであれば、ストリーム内のランダムな位置からオブジェクトをどのように逆シリアル化しますか?
c# - 共有クラスでの WCF エラー サービス エラー メッセージ
ソースコード: http://code.google.com/p/sevenupdate/source/browse/#hg/Source/SevenUpdate.Base
SevenUpdate.Base.Sui はインポートした DataContract と一致しないため使用できません。参照される型からこの型を除外する必要があります。
ここで、再利用参照型のチェックを外してみましたが、プロジェクトをコンパイルすることができました。しかし、クライアントからコレクションを送信すると、サーバー側で受信されなかったか、逆シリアル化できませんでした。
私は本当にこれが機能する必要があります。助けていただければ幸いです。完全なソース コードは Google コードによって提供されます。
c# - protobuf-csharp-port と protobuf-net のどちらを選択するか
私は最近、もともと Google が開発した Protocol Buffers ライブラリの C# 移植を探す必要がありました。なんと、ここで 2 つの非常に有名な人物が所有する 2 つのプロジェクトを見つけました。Jon Skeetが作成したprotobuf-csharp-portと、 Marc Gravellが作成したprotobuf-netです。私の質問は簡単です。どちらを選択する必要がありますか?
Marc のソリューションは、C# の哲学に近いように思え (たとえば、既存のクラスのプロパティに属性を追加するだけでよい)、System.Guid などの .NET 組み込み型をサポートできるように見えるので、非常に気に入っています。
どちらも本当に素晴らしいプロジェクトだと思いますが、どう思いますか?
c# - protobuf-net - バックティック、辞書、.proto ファイル
http://code.google.com/p/metasyntactic/wiki/ProtocolBuffersを使用して、iphone から protobuf-net を使用する C# プログラムと通信しようとしています。
残念ながら、私が受け取った (C# ソース コードから生成された) .proto ファイルには、protoc が拒否している行が含まれています。
これは、ソース データが C# ディクショナリであり、値として Guid キーとクラスがあるためと思われます。これにうまく対処する方法はありますか?
使用されている protobuf-net のバージョンは r278.zip です。
(これらの protobuf の送受信はすべて正常に動作します。これが問題になるのは、iPhone をミックスに追加したときだけです。)
更新: マークのおかげですべてが機能するようになりました!
C# 側のオブジェクトは次のようになりました。
.proto で次を使用して正常に機能しました。
問題のメッセージには次が含まれます。
protobuf-net - protobuf-netで生成されたバイナリはGoogleの仕様と互換性がありますか
実際、GoogleのJava実装を使用してデータをシリアル化し、次にC#実装を使用して逆シリアル化したいですか?
より安定しているように見えるので、私はprotobuf-netを選択しました(proto#はまだv0.9であるか、私はそれを選択したでしょう)。作業を開始する前に、これを実現できることを確認したかった(Java実装を使用してデータをシリアル化し、protobuf-netを使用してデータを逆シリアル化する)。または、protobuf-netの実装に固有のメソッドのリストはありますか?
c# - protobuf-net:Guidプロパティを逆シリアル化する誤ったワイヤタイプの例外
protobuf-netを使用してORMで生成されたエンティティの特定のGuidプロパティを逆シリアル化する際に問題が発生します。
コードの簡略化された例を次に示します(シナリオのほとんどの要素を再現しますが、動作は再現しません。内部エンティティを公開できないため、例外を説明するための手がかりを探しています)。読み取り専用のGUIDと読み取り/書き込み文字列をAccount
持つクラスがあるとします。クローンをシリアル化し、すぐに逆シリアル化します。AccountID
AccountName
Incorrect wire-type deserializing Guid
デシリアライズは、デシリアライズ中に例外をスローします。
使用例を次に示します...
そして、これがORMされたクラスの例です(簡略化されていますが、私が考えることができる関連するセマンティクスを示しています)。シェルゲームを使用して、バッキングフィールドを公開することにより、読み取り専用プロパティを逆シリアル化します(「書き込み不可」は基本的に「書き込み不可」になりますが、これらのフィールドに割り当てるインスタンスのコードをスキャンできるため、ハックは目的)。
繰り返しますが、これは例外の動作を再現しません。私は何ができるかについての手がかりを探しています:
XML、JSON、およびDataContractシリアライザーはすべて、これらのオブジェクトグラフを正常にシリアル化/逆シリアル化するように見えるため、属性の配置は基本的に機能します。リストと単一インスタンス、異なるプレフィックススタイルなどを使用してprotobuf-netを試しましたが、逆シリアル化すると常に「不正なワイヤタイプ...GUID」例外が発生します。
したがって、具体的な質問は、これに関する既知の説明/回避策はありますか?(実際のコードでは、例ではなく)どのような状況が原因であるかを追跡しようとすると途方に暮れます。
エンティティ層に直接protobuf依存関係を作成する必要がないことを望んでいます。その場合は、protobuf属性を持つすべてのパブリックプロパティを使用してプロキシDTOエンティティを作成する可能性があります。(これは私がすべての宣言型シリアル化モデルで抱えている主観的な問題です。これはユビキタスなパターンであり、なぜそれが発生したのかは理解していますが、IMOは、人を月に乗せることができれば、「通常」はオブジェクトとシリアル化契約を持つ必要があります分離。;-))
ありがとう!
protobuf-net - カスタム ツール エラー: Command.proto:11:18: "Message2" が定義されていません
VS2008 と統合された最新バージョンの protobuf-net を使用しています。2 つのメッセージ (Message1 と Message2) を作成しました。1 つのメッセージは 1 つの proto ファイルに含まれています。Message1 で Message2 を参照しようとすると、コード ジェネレーター ツールで "Message2" is not defined というエラーが表示され、コード ファイルが生成されません。両方のメッセージのパッケージは同じです。
ツールが VS2008 と統合されているため、同じ .proto ファイル内のすべてのメッセージがコンパイルされることを期待しているようです。現在、次のように、Message1.proto ファイルに同じ名前の空のメッセージを貼り付ける必要があります。
そして後でclass Message2
fromの宣言を削除しMessage1.cs
ます。このエラーを回避するために必要な設定はありますか、それとも空の宣言を提供する唯一の方法ですか? または、そうでない場合は、「extern」などのキーワードを含めて、この型の定義が別のクラスで利用可能であることをコンパイラに伝えることをお勧めします (Marc Gravell)。