問題タブ [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.
c# - BinaryFormatter 例外
オブジェクト グラフをサーバー プロセスからクライアントに移動しようとしています。そして、それは機能します。少なくとも、クライアントとサーバーの両方が開発仮想マシン上にある場合は機能します。ベースマシン(dev vmのクライアント)でサーバーを実行するときにも機能します。
ただし、メディア センター PC でサーバーを実行すると、動作しなくなります。例外は次のとおりです。
バイナリ ストリーム '0' には、有効な BinaryHeader が含まれていません。考えられる原因は、無効なストリームまたはシリアル化と逆シリアル化の間のオブジェクト バージョンの変更です。
3 台の PC はすべて x64 Windows 7 マシンです。クラスと一緒に TCPClient と TCPListener を使用して、面倒な作業を行ってBinaryFormatter
います。
転送されるデータは、標準FileStream
オブジェクトを使用してファイルから読み取られます。
クライアント側でバッファをファイルにシリアル化すると、(BeyondCompare によると) 内容が実際には異なるように見えますか?!?
オブジェクトのすべての文字列プロパティは、セッターで Base64 エンコードされ、ゲッターでデコードされます。
コードを投稿できますが、問題の領域がどこにあるのかわかりません。何か案は?
vb.net - BinaryFormatter.Serialize with MemoryStream の問題
BinaryFormatter.Serialize の使用に問題があります。
バイナリシリアル化を介してオブジェクトを「複製」するためのこの汎用拡張メソッドがあります。
次のように「Clone」メソッドを持つ「Mode」というクラスもあります。
私の GUI には、選択した Mode オブジェクトのクローンを作成できる機能があります。ユーザーが一連の新しいモード名を入力すると、ルーチンがこれらの新しい名前を循環して、選択したモードのクローンを作成します。
したがって、基本的には、選択した Mode オブジェクトの 1 つまたは複数のクローンを作成し、Name プロパティを正しい値に設定し、新しい Mode オブジェクトを親に追加する必要があります。これには、Mode.Clone メソッドへの X 回の呼び出しと、CloneViaSerialization 拡張メソッドへの X 回の呼び出しが含まれます。
これが私の問題です。CloneViaSerialization を複数回呼び出している間、MemoryString の長さ (Debug.WriteLine ステートメントで表示される) は、前回の呼び出しのほぼ 2 倍になります。たとえば、5 つのクローンを作成すると、デバッグ出力は次のようになります。
MS の長さ = 106882 MS の長さ = 188048 MS の長さ = 350482 MS の長さ = 675350 MS の長さ = 1325086
これは致命的なパフォーマンスです。約 7 または 8 個のクローンを超えると、アプリが停止します。なぜこれが起こるのでしょうか?USING ブロックは、MemoryString が確実に破棄されるようにする必要がありますね。毎回新しい MemoryString を作成するべきではありませんか? 同じ元の Mode オブジェクトがシリアル化のソースであるため、MemoryString の長さは同じになると思います。何か案は?ここで何が欠けていますか?
前もって感謝します!
.net - BinaryFormatter を使用して異なるが等しいオブジェクト グラフをシリアル化すると、同じバイナリ表現が生成されますか?
オブジェクトモデルのシリアル化に基づいて、オブジェクトモデルをハッシュすることを検討しています。
.NET BinaryFormatter を使用してオブジェクト グラフをシリアル化する場合、関連するすべてのオブジェクトが同じ値で構成されている別のオブジェクト グラフに対して、シリアル化された表現はバイトごとにまったく同じであることが保証されますか?
直感的にはそう思いますが、オブジェクト/参照 ID が実際のシリアル化された表現に何らかの影響を与えるかどうかはわかりません。
前もって感謝します。
c# - リスト付きシリアライゼーションバインダー
BinaryFormatter
アセンブリのさまざまなバージョン間で作業を行おうとしています。逆シリアル化する実際のクラスは、各アセンブリ バージョンでまったく同じですが、逆シリアル化では、オブジェクトがシリアル化されているため、元のアセンブリ名が含まれているBinaryFormatter
ため、適切なアセンブリが見つからないと不平を言っています。そこで、常に現在のアセンブリ バージョンに逆シリアル化するように SerializationBinder
指示するカスタムを作成しました。BinaryFormatter
私のスキームは機能し、オブジェクトを正しく逆シリアル化できますが、オブジェクトが T のリストである場合は機能しません。ここで、T はアセンブリの古いバージョンからシリアル化された型です。
型パラメーターがアセンブリのクラスであるリストやその他のジェネリック型でこれを機能させる方法はありますか?
c# - BinaryFormattere が存在するファイルに対して FileNotFoundException をスローするのはなぜですか?
このコードを使用して、いくつかの属性を持つファイルをシリアル化しました。
p>次に、これを使用しようとすると:
p>次の例外が発生します: ileNotFoundException: ファイルまたはアセンブリ '922ab9ba88eba49469a1eeab68bc0baa' またはその依存関係の 1 つを読み込めませんでした。システムは、指定されたファイルを見つけることができません。
ファイルが存在し、ファイルを消去すると、次の例外が発生します: FileNotFoundException: ファイル "C:\Users\Gilson\Documents\AntHill\anthill\Game.data" が見つかりませんでした
それを解決する方法についてのアイデアはありますか?私はC#が初めてなので、何をすべきかわかりません。
c# - BinaryFormatter.Deserialize() メソッドが AutoCAD プラグインで機能しない
AutoCAD プラグインDeserialize
のインスタンスでメソッドを呼び出すと、その後の次のコード行が実行されません。何が原因でしょうか? 助けてくれてありがとう。System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
IExtensionApplication.Initialize
c# - BinaryFormatter 、正確な TYPE-SIZE バッファ
私はこのシリアライズ可能なクラスを持っています:
タイプ BYTE は 1 バイト、タイプ SHORT は 2 バイト、タイプ INT は 4 バイトであることを知っているため、7 バイトのバッファを待っていましたが、次のコードでは 232 バイトのバッファ サイズを取得しました。
次のようなコードで手間をかけずに、「正確なタイプサイズのバッファ」をIP経由で送信したいと思います。
クラスを構造体ではなくクラスにする必要があります。方法はありますか?
c# - BinaryFormatterオブジェクトグラフのアップグレード
私のオブジェクトグラフには、次のようなものがあります
そして私は犬のあらゆる種類のリストと犬への言及を持っています。
ソフトウェア作成当初はDogは動物に過ぎなかったので、基本クラスは必要ありませんでした。今、その必要性が浮かび上がってきました。
しかし、私がOLDアーカイブを逆シリアル化するとき、私は犬を飼っていません。それらはアーカイブからまったく逆シリアル化されませんでした。
私が欲しいのはそれを行う方法についてのアドバイスです。新しいクラス階層が必要で、オブジェクトを古いDogから新しいTheDogに手動でコピーする場合は問題ありませんが、可能であればそれを避けたいと思います。
編集:いくつかの.NETの達人、なぜ私は犬を飼っていないのですか?
android - Android での BinaryFormatter シリアライゼーション/デシリアライゼーションの代替手段
BinaryFormatter serialize メソッドを使用して C# でシリアル化されたクラスがあります。Androidアプリケーションでデシリアライズできる方法はありますか? つまり、アンドロイドに BinaryFormatter の代替手段はありますか?