問題タブ [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 はどのようにオブジェクトをシリアル化しますか?
BinaryFormatter
私のコードで奇妙な振る舞いをしています。次のようなコードがあります
一部のマシン (32 ビットまたは 64 ビットのマシン) では、バイナリ形式でシリアル化されますが、これは想定どおりです。しかし、一部のマシン (すべて 64 ビット マシンであり、デバッグ ビルド用ではありません) では、シリアル化されておらず、すべての個々のクラス名 ( ) および値の値binarySerializedLog
が表示されています。私の質問は、この種の行動には特定の理由があるのでしょうか、それとも何か間違いを犯しているのでしょうか? 前もって感謝します。ToString()
Data
...LogEntry
id
.net - IFormatter は、参照されていない型のオブジェクトを逆シリアル化できますか?
でサードパーティのライブラリ型オブジェクトをシリアル化したとしBinaryFormatter
ます。このライブラリを参照しないアセンブリは、バイトを逆シリアル化しようとします。それはうまくいきますか?
object
正しい型にキャストされるとは思っていません。インスタンスとして取得して、グループ化して再度シリアル化できるようにしたいだけです。
c# - バイナリストリーム「NN」に有効なBinaryHeaderが含まれていません
ユーザー定義のクラスをソケットに渡します。SendObjectコードは以下のとおりです。ローカルマシンでは機能しますが、Webサーバーに公開すると、自分のマシンのアプリケーションサーバーと通信できなくなります。
ツールプロジェクトの1つのクラスであり、UserDataに関する他のクラスが知りたくない場合は、これをうまく行うことができます。イライラする!
ああ。UserDataクラスの中にDataSetがあるからだと思います。おかしなことに、私はこの作品を見てきましたが、1回のリクエストの後、ループが発生し、再び動作させることができなくなりました。
なぜこれが起こるのか誰もが知っていますか?dllを比較して、Webサーバーとローカルマシンで同じであることを確認しました。AssemblyInfo.csでバージョン管理をオンにして再確認したので、同じように見えます。
考えられる原因は、シリアル化と逆シリアル化の間の無効なストリームまたはオブジェクトのバージョン変更です。
編集:
問題はサイズにあるようです。1024バイト未満に保つと(ここで推測しています)、Webサーバー上で機能し、内部にDataSetがある場合は機能しません。k実際、これは非常に不可解で、ds.GetXml(を使用してDataSetを文字列に変換しました。 )そしてこれはまたそれを爆破させます。:(それで、ネットワーク全体で私のソケットの何かが間違っていて、データを読みたくないようです。
.net - .Net BinaryFormatter シリアル化形式の公式仕様はどこにありますか?
BinaryFormatter のシリアル化形式を教えてください。良い情報を提供しているこのサイトを見つけましたが、リバース エンジニアリングによって取得されたものであり、完全ではありません。
BinaryFormatter シリアル化形式の公式仕様はどこにありますか?
.net - BinaryFormatter の逆シリアル化により、SerializationException が返されます
私は得ています:
System.Runtime.Serialization.SerializationException: アセンブリが見つかりません 'myNameSpace、バージョン = 1.0.0.0、カルチャ = ニュートラル、PublicKeyToken = null
シリアル化したプログラムとは別のプログラムでデータを逆シリアル化しようとしたとき。
グーグルで調べたところ、明らかにこれは共有アセンブリを使用してのみ実行できることがわかりました。
しかし、私のデータベースはこのシリアル化されたオブジェクトでいっぱいで、それらを取り出すユーティリティ プログラムが必要です。この動作をオーバーライドして、まったく同じクラスをフィードし、強制的に逆シリアル化する方法はありますか?
このスニペットは既に見つけましたが、これをどこにどのように配置/使用すればよいかわかりません。
c# - バイト配列を拡張しようとした場合にのみ、ソケットを介して大きなシリアル化されたオブジェクトを送信すると失敗しますが、大規模なバイト配列を使用する場合は問題ありません
ソケット経由でデータを受信しながら、バイト配列を拡張しようとしているコードがあります。これはエラーになっています。
エラー: mscorlibError : 入力ストリームが有効なバイナリ形式ではありません。最初の内容 (バイト単位) は次のとおりです。
それでも、MASSIVEバッファサイズをごまかして使用すると問題ありません。
これは本当に私を殺しています。なぜ機能しないのかわかりません。ここでも提案から結合を解除したので、これは間違ったことをしていないと確信していますか?
誰かが私が間違っているところを指摘してくれることを願っています
c# - BinaryFormatter がシリアライズ可能なクラスでイベントをシリアライズしようとするのはなぜですか?
Serializable としてマークされた単純なクラスがあり、たまたまイベントがあります。イベント メンバーを NonSerialized としてマークしようとしましたが、コンパイラが文句を言います。しかし、クラス インスタンスをシリアル化しようとすると、BinaryFormatter は、イベントがシリアル化できないという例外をスローします。イベントを持つクラスをシリアル化できないということですか? もしそうなら、コンパイラは前もってそう言うべきです。
次のクラスでは動作しません:
}
c# - 署名されたアセンブリの異なるバージョンで記述されたジェネリックを逆シリアル化するための最良の方法は何ですか?
その他の場合は、アセンブリタイプからバージョンを削除するSerializationBinderを追加することをお勧めします。ただし、署名されたアセンブリで見つかったタイプのジェネリックコレクションを使用する場合、そのタイプはそのアセンブリに基づいて厳密にバージョン管理されます。
これが私が見つけた作品です。
ただし、バインディングプロセスをグローバルに変更させることは、私にはかなり危険に思えます。複数のスレッドでシリアル化が行われていると、奇妙なことが起こる可能性があります。おそらく、より良い解決策は、typeNameの正規表現操作を行うことです。
編集: 文字列ベースの方法は機能しません。ジェネリックスには、完全に厳密に名前が付けられた型が必要なようです。あなたが私に尋ねればかなり凶悪です。
.net - ISerializable と下位互換性
メインクラスが属性でマークされている最適化なしで、binaryFormatterを使用してアプリケーションデータをファイルストリーム(「data.oldformat」という名前のファイルなど)にシリアル化する古いアプリケーションを操作する必要があります
そしてシリアルコード
シリアライゼーション/デシリアライゼーション プロセスを最適化するために、クラスに ISerializable インターフェイスを実装させ、最適化されたシリアライゼーション ルーチンをいくつか書きました。
最適化は非常にうまく機能しますが、下位互換性のために古いファイル内のデータを再取得する方法を見つけなければなりません。
どうやってやるの??
ピエルルイジ
c# - MemoryStreamの質問を含むBinaryFormatter
BinaryFormatterをテストして、どのように機能するかを確認しています。簡単な質問があります。
文字列HELLOで使用し、MemoryStreamを配列に変換すると、29の次元が得られ、そのうちの5つが次元の終わりに向かって実際のデータになります。
戻り値
すべての無関係な情報なしでバイトとしてエンコードされたデータのみを返す方法はありますか?