問題タブ [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 投票する
2 に答える
3551 参照

serialization - 解析が完了する前にストリームの終わりが発生しました。SerializationException

誰でもこの方法を手伝うことができますか?ファイルを型に逆シリアル化するための一般的な方法があります。

このSerializationExceptionが発生する理由はありますか?

ありがとうございました。

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

c# - バイナリ オブジェクト グラフのシリアル化

.net アプリでのシリアル化に関するアドバイスを探しています。アプリはデスクトップ/シック クライアント アプリであり、シリアル化は永続化されたドキュメント形式を表します。シリアライザの要件は次のとおりです。

  • パブリック プロパティのみではなく、フィールドのシリアル化を許可する必要があります。
  • パラメーターなしのコンストラクターを要求してはなりません。
  • 一般的なオブジェクト グラフ、つまり DAG だけでなく共有/双方向参照を処理する必要があります。
  • フレームワーク クラスで動作する必要があります (例: Serialize Dictionaries)。

現在、上記のすべてをうまく処理する BinaryFormatter を使用していますが、サイズ/パフォーマンスとバージョンの許容範囲が問題です。[OnDeserialized/ing] 属性を使用して互換性を提供していますが、サロゲートなどの複雑な使用なしに大規模なリファクタリング (名前空間の変更など) を行うことはできません。

理想的な解決策は、既存の [NonSerialized] 注釈などで動作する BinaryFormatter のドロップイン置換ですが、パフォーマンスが向上し、より小さくて維持しやすい形式を生成します。

私はさまざまな protobuf の実装を見てきましたが、最近では一般的なオブジェクト グラフ/列挙型/構造体をシリアル化することは可能であるように見えますが、多くのフレームワーク コレクション タイプなどを含む複雑なグラフをシリアル化することは簡単ではないようです。プロパティではなくフィールドで機能させることができますが、すべてのクラスにパラメーターなしのコンストラクターと protobuf 注釈を追加する必要があることを理解しています (ドメインは約 1000 クラスです)。

だから質問:

  • 十分に文書化された形式を提供し、パフォーマンスが向上する「代替」のバイナリフォーマッタはありますか?
  • プロトコル バッファは、フレームワーク タイプを含む大規模な一般オブジェクト グラフの永続化に適していますか?
0 投票する
3 に答える
5138 参照

c# - .NET でのアセンブリに依存しないシリアル化

シリアライゼーション/デシリアライゼーション手法を使用します。BinaryFormatter クラス。新しいアセンブリが作成されるたびに、BinaryFormatter は、クラス構造が同じであってもバイナリ データを逆シリアル化できませんが、アセンブリのバージョンは異なります。クラス構造が変更されていない場合、アセンブリのバージョンをチェックせずにバイナリ バッファを逆シリアル化することは可能ですか?

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

c# - BinaryFormatter での参照整合性

Protobuf-net に AsReference オプションが存在し、BinaryFormatter が「グラフ シリアライザー」であるという言葉から、BinaryFormatter は参照を維持せず、すべてのオブジェクトのコピーを作成すると考えるようになりました。

しかし、いくつかのテストを行ったところ、単一の BinaryFormatter Serialize() または Deserialize() 呼び出し内のすべての参照が、再帰参照でも維持されることがわかりました。

BinaryFormatter が実際に参照を保持していることを確認できますか? これは Protobuf-net とどう違うのですか? 「グラフのシリアル化」を間違って理解しているようですか? 他に何に注意すればよいですか?

前もって感謝します。

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

.net - .NET でのシリアル化と難読化

難読化してユーザーに配布したいバイナリがあります。難読化されていないバージョンのバイナリを使用して、市販の .NET バイナリ フォーマッタを使用してデータをシリアル化するとします。次に、難読化されたバイナリを使用してデータを逆シリアル化できますか?

難読化されたバイナリとシリアル化されたデータを配布したいと考えています。上記の質問に対する答えが「はい」の場合、シリアル化されたデータをユーザー間で共有できます。そうしないと、個々のシリアル化されたデータを各ユーザーに提供する必要があります。

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

c# - 名前空間が変更された型に逆シリアル化する

.NET 4/C# を使用しています...

たとえば、 ns1.X という名前の型のシリアル化された表現を含む古い構成ファイルを逆シリアル化する必要があります。シリアル化は、 を使用して行われましたBinaryFormatter

問題は、一連のリファクタリングの後、型 X が別の名前空間、たとえば ns2.X に移動したことです。

ns2.X から派生した新しい空の ns1.X 型を作成しようとしましたが、これにより「型 ns1.X が見つかりません」というエラーが回避されますが、逆シリアル化されたオブジェクトのプロパティはすべてnullです。また、プロセスで呼び出される ctor はありません。

助言がありますか?

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

.net - .NETでBinaryFormatterを使用して多次元配列をシリアル化するときのパフォーマンスの問題

を使用してBinaryFormatter、フロートのかなり単純な多次元配列をシリアル化しますが、問題は任意のプリミティブ型で発生すると思われます。私の多次元アレイには10000x16フロート(160k)が含まれており、PCでのシリアル化は最大8 MB /秒で実行されます(60秒のベンチマークでSSDドライブに最大500 MBを書き込みます)。コード:

同じことを行いますが、160kフロートの1次元配列を使用すると、同じ量のデータが最大179 MB/sでディスクにシリアル化されます。20倍以上高速です! を使用して2次元配列をシリアル化すると、BinaryFormatterパフォーマンスが低下するのはなぜですか? メモリ内の2つのアレイの基本的なストレージは同一である必要があります。(安全でないネイティブpin_ptrを実行し、C ++ / CLIで2D配列との間でコピーを実行しました)。

ISerializableハックな解決策は、2D配列を1D配列に実装してmemcopy(unsafe / ptr pinning / block memcopy)を実行し、それと次元をシリアル化することです。私が検討しているもう1つのオプションは、への切り替えprotobuf-netです。

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

web-applications - Java Webアプリケーションを単一のWindowsインストーラに変換する方法は?

私はEclipse、Struts 2フレームワーク、およびJSPを使用してJava Webアプリケーションを開発しました.これは、ユーザーがインストーラーを使用してアプリケーションをインストールできるバイナリ形式でエンドユーザーに配布したいERPソフトウェアアプリケーションです.(提案してください)どちらが適しているか) ウィンドウプラットフォームに。私の他の要件は、すべてのソフトウェアを単一の Windows インストーラーとして Java Web アプリケーションにバンドルすることです。よろしくお願いします。

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

c# - BinaryFormatterからのオプションフィールドの逆シリアル化

を使用してデータをシリアル化するアプリケーションがありますBinaryFormatter。クラス名を変更せずに、あるバージョンから次のバージョンにシリアル化されたクラスにメンバーが追加されました。古いシリアル化されたファイルに追加されたメンバーが存在しない可能性を処理するためのコードが追加されました。

私が今しているポイントは、本当にすすぎ、追加したい別のメンバーで繰り返したいということです。つまり、別のフィールドを追加して、と同様のブロックを試してみNewStuffIncludedRecentlyます。

クラス全体を作成することを考えていました[Serializable]が、古いシリアル化されたデータとの互換性が損なわれることはありませんか?

私の主な懸念は、逆シリアル化がどのように機能するかが明確でないことです。上記と同様に別のオプションフィールドの処理を追加すると、機能しますか?これらの変更をより適切に処理するために私が持っている他のオプションは何ですか?

いつものように事前に感謝します。