問題タブ [binaryformatter]

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.

0 投票する
1 に答える
323 参照

visual-studio - ネットワークストリームでsystem.outofmemoryexceptionを逆シリアル化します

ここにいくつかのパブリックフィールドが表示されたCerealというシリアル化可能なクラスがあります

私のクライアントコンピューターは、ここに示されているようにシリアル化することにより、新しいシリアルをホストに送信しています。

ホストはアクティビティのストリームをリッスンし、何かがストリームに追加されると、ここに示す新しいシリアルに逆シリアル化することになっています。

次の行を実行すると、System.OutOfMemoryExceptionが発生し、これが機能しない理由がわかりません。

ストリームはTCPClientストリームです。シリアル化/逆シリアル化とVisualStudio11の使用は初めてです

0 投票する
2 に答える
3101 参照

c# - BinaryFormatter-アセンブリなしで既知のクラスを逆シリアル化することは可能ですか?

私は現在、C#のBinaryFormatterでデータを最初にフォーマットした後、ネットワーク経由でデータを送信するプログラムと相互運用しようとしています。それはばかげた考えであり、私はそれを嫌いますが、私はそれと相互運用する必要があります。

私はタイプがどのように見えるかを知っています、私はそれが正確なレイアウトであることを知っています。しかし、さまざまな理由から、プログラムにその特定のアセンブリへの参照を追加することはできません。

BinaryFormatterが特定のタイプ/バージョンにどれほど緊密に結合されているかを考えると、データ構造を知っているにもかかわらず、それを逆シリアル化する方法を見つけることができないようです。

私は現在、すべての適切な属性を使用して偽のアセンブリを作成し、それをリンクしようとするか(本当に厄介なようです)、手動でバイナリストリームを調べて、探している値を抽出しようとしています(私はこれに関するMSのドキュメントを見ると、レイアウトに関しては明らかに泥だらけです)。

他に素晴らしいアイデアはありますか、または過去にこれで成功した人はいますか?私は必要なすべての情報を知っているようで、BinaryFormatterはそれについて悪名高いほど壊れやすいだけです。

編集:

以下の質問に答えるには(これは良い点ですが)、いくつかの理由があります。

  1. プロジェクトの清潔さ。1つの機能の外部である.exeに5MBの参照を追加するのは少しずれています。

  2. 私が相互運用している機器には、世界中にさまざまなバージョンが展開されています。気になるアイテムの内部データ構造はすべて同じですが、アセンブリのバージョンが異なるため、BinaryFormatterで破損が発生します。バイナリストリームを文字列に変換し、バージョン番号を検索してから適切なバージョンをロードすることもできますが、今では1ダースの.exeが配置され、正しいバージョンがロードされるのを待っています。その場合、そのスキームは将来を保証するものではありません(まあ、このスキーム全体は実際には将来を保証するものではありませんが、少なくともBinaryFormatterの脆弱性の一部を抽象化して、仕事を容易にしたいです)。この応答を書くだけで、emitなどを使用して、カスタムアセンブリをその場で作成することを考えました。しかし、もっと簡単な方法が必要ですよね?私'

  3. オブジェクトの変数は、いくつかのロジックを持つget / setプロパティを介して公開され、関数呼び出しを行って、自分の側に存在しない可能性のある他のオブジェクトを更新しようとします(つまり、getは必要な値を取得しますが、トリガーもしますリンクされた依存関係を介して波及する通知で、アプリケーションに例外が発生する可能性があります。コードの臭いについて話してください!)。それは依存関係/実装のうさぎの穴に変わります。

edit2:メーカーは私と協力してシス​​テムを改善していますが、「Works with X」を宣伝するときは、特定のバージョンを必要とせずに、Xでのみ動作するようにしたいと考えています。特に、バージョン管理が厳密に行われている一部のお客様のシステムでは、問題のあるアプリケーションを更新するだけで大​​きな作業になります。

0 投票する
1 に答える
85 参照

.net - 奇妙なバイナリ フォーマッタの動作

私は画像の配列を持つ構造体を持っています:

オブジェクトに 10 kb の 2 つの画像を配置してシリアル化しようとすると、メモリ ストリーム ターゲットが 160 kb であることがわかりました。私が確認したところ、各画像のサイズは 10 ~ 11kb です。

私はそれが本当に奇妙だと思いました!どこが問題なのか分かる方教えてください。

0 投票する
0 に答える
1256 参照

c# - NetworkStream のデシリアライズ中に BinaryFormatter Deserialize がランダムにハングする

実際の問題領域を覆い隠すことなく、できるだけ多くのコードを省略しようとしました。完全なコードを表示する必要がある場合は、お知らせください。

そのため、データベース接続を軽減し、単一ノードからのすべてのインバウンド データベース リクエストを処理する非常にシンプルな TCP アプリケーションを構築しました。このコードは、約 200,000 の接続 (要求と応答) を処理し、その後、要求を受信すると BinaryFormatter.Deserialize メソッドでランダムにどこかでハングします。なぜこれが起こっているのか、誰にも考えがありますか?

例外は生成されず、無期限にハングします。

サーバーコード:

クライアントコード:

0 投票する
2 に答える
1786 参照

c# - BinaryFormatter と XmlSerializer を同じ意味で使用する

シリアライゼーションに BinaryFormatter を使用する大量のコードを継承したので、デバッグする必要があります。現在、すべてのシリアル化コードは IFormatter を想定しています。

BinaryFormatter を XmlSerializer に置き換えて、シリアル化された出力を簡単に調べられるようにするというアイデアがありましたが、互換性がありません (共通のベースまたはインターフェイスがありません)。

これに対する標準的なアプローチはありますか?たとえば、パラメーターをコードで使用できる汎用シリアライザーのようなものにしますか? 理想的には、最上位で必要な具体的なシリアライザーを作成し、下位レベルで具体的な型を知る必要なくそれを渡したいと思います。

私が現在持っているものの例:

0 投票する
1 に答える
15635 参照

c# - ファイルの読み込みが機能しない-GZipヘッダーのマジックナンバーが正しくありません

ファイルの圧縮ファイルを保存およびロードするオプションを持つ保存/ロードクラスを作成しようとしています。以下は私がこれまでに持っているものです。「GZipヘッダーのマジックナンバーが正しくない」という例外が発生することを除けば、ステップスルーは問題なく機能しているようです。番号を渡す前に番号がそこにあることを確認しているので、これがどのようになり得るのかわかりません。また、外部プログラムを介して、それがGZipファイルであることを確認しました。

私がどこで間違っていたのかを見つけるための助けをいただければ幸いです。私のコードに対する建設的な批判はいつでも歓迎です-ありがとう!

0 投票する
3 に答える
2352 参照

c# - アセンブリ間で移動されたタイプの逆シリアル化

あるアセンブリから別のアセンブリに移動されたタイプがたくさんあります。SerializationBinderを使用して、古いアセンブリを使用してシリアル化されたデータを新しいアセンブリの型に逆シリアル化しようとしています。

編集:アセンブリのルート名前空間は、アセンブリ名と同じです。古いアセンブリはもう存在しません。

逆シリアル化コードは次のようになります-

デシリアライズしようとすると、古いアセンブリをロードしようとするとエラーが発生します。

ファイルまたはアセンブリ'古いアセンブリ'またはその依存関係の1つを読み込めませんでした。システムは、指定されたファイルを見つけることができません。

0 投票する
2 に答える
406 参照

c# - c# で byte[] を構造体に変換する 2 つの方法の違い

byte[]いくつかの構造とその表現の間でいくつかの変換を行っています。これを行う 2 つの方法を見つけましたが、違い (パフォーマンス、メモリなど) は明確ではありません。

方法 1:

方法 2:

どちらが優れており、主な違いは何ですか?

0 投票する
2 に答える
897 参照

c# - オブジェクトの情報なしでオブジェクトをシリアライズする

オブジェクトのメンバーの値のみをファイルにシリアル化する必要がある状況にあります。

たとえば、オブジェクトに 3 つの文字列メンバーが含まれている場合、オブジェクトのバージョン、カルチャ、アセンブリ名など、Binaryformatterが追加するシリアル化メタデータを除いて、シリアル化の出力をこの 3 つの文字列のみにする必要があります。

1 つのオプションは、オブジェクトの各メンバーを直接記述することですが、このようにシリアル化する必要があるクラスがたくさんあり、これをクラスごとに異なる方法で処理する関数を記述したくないため、これを避けたいと考えています。

要件:

任意のタイプのファイルに書き込めるようにしたい。メンバーの値をバイトに変換して (バッファに、または直接ファイルに)、それらのバイトをファイルの特定の位置に書き込めるようにしたい。 .

オブジェクトのメンバーの値のみをシリアル化する方法または API はありますか?

0 投票する
1 に答える
714 参照

c# - オブジェクトバイナリをXMLに逆シリアル化しますか?

オブジェクトをXMLに逆シリアル化するのに問題があります。空のコンストラクターがないものを逆シリアル化しようとしているので、BinaryFormatterを使用する必要がありますか?私は持っています:

  • XMLに逆シリアル化したいクラスで構成されるDLL。
  • タイプを反映することから、パラメーターのないコンストラクターがないことがわかります。
  • このクラスには、空のコンストラクターを持たないプロパティも含まれています。

私の質問は、このクラスをXMLに逆シリアル化することは可能ですか?私はそれを使用する方法を見つけました:

  • BinaryFormatter
  • コンテンツをストリームにロードしました
  • FileStreamを使用してコンテンツを書き込みましたが、最終的にはゴミになりました

前もって感謝します。FormatterServicesと呼ばれるものを見つけました...しかし、これをXmlSerializerと組み合わせて使用​​できるかどうかわかりませんか?