問題タブ [binary-serialization]
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# - C# 値のみをバイト ストリームにシリアル化する
クラスのプロパティを byte[] 配列またはストリームに自動的にシリアル化する可能性はありますか?
上記の例では、名前空間、クラス名、変数名などを含むクラス全体をシリアル化しました。自動化されたソリューションがない場合は、手動で行います。
よろしく、マーク
serialization - protobuf-net にはシリアライゼーション用の圧縮機能が組み込まれていますか?
BinaryFormatter
私はと protobuf-net シリアライザーを比較していて、私が見つけたものに非常に満足していましたが、奇妙なことに、protobuf-net は、値を書き込んだ場合よりも小さなバイト配列にオブジェクトをシリアル化できたことです。すべてのプロパティをメタデータなしでバイト配列に変換します。
AsReference
に設定すると、 protobuf-net が文字列のインターンをサポートすることは知っていますtrue
が、この場合はそうしていないので、protobuf-net はデフォルトで圧縮を提供しますか?
自分で確認するために実行できるコードを次に示します。
編集:追加するのを忘れました、SimpleObject
クラスは次のようになります:
c# - C#とAndroid / Java-クロスランゲージのバイナリストリームライター/リーダー?(プリミティブおよびUTF-8文字列の場合)
C#とAndroidのJavaの間でカスタムデータのバイナリシリアル化/逆シリアル化を行う最も簡単な方法は何ですか?Javaの場合、C#BinaryWriterやBinaryReaderに似たものを見つけたいと思います。これはプリミティブ(uint16など)とUTF-8文字列の書き込みをサポートしています。
それとももっと良い方法がありますか?
編集:データの構造はコンパイル時に不明です
サンプル書き込み:
c# - 名前空間が変更された型に逆シリアル化する
.NET 4/C# を使用しています...
たとえば、 ns1.X という名前の型のシリアル化された表現を含む古い構成ファイルを逆シリアル化する必要があります。シリアル化は、 を使用して行われましたBinaryFormatter
。
問題は、一連のリファクタリングの後、型 X が別の名前空間、たとえば ns2.X に移動したことです。
ns2.X から派生した新しい空の ns1.X 型を作成しようとしましたが、これにより「型 ns1.X が見つかりません」というエラーが回避されますが、逆シリアル化されたオブジェクトのプロパティはすべてnull
です。また、プロセスで呼び出される ctor はありません。
助言がありますか?
c# - protobuf-net または他のシリアライザを使用してサードパーティのタイプをシリアライズするにはどうすればよいですか?
私は持っていますList<HtmlAgilityPack.HtmlNode>
が、protobuf-net は契約がないというエラーを出します。ソースがない場合、どうすれば契約を指定できますか? 実際には型を推測できないと言われましたが、属性を使用しなかったためだと思いますよね?
型がシリアライズ可能としてマークされていないため、デフォルトのバイナリシリアライザーも文句を言います。
編集:エラーメッセージは次のとおりです。
c# - C# での散発的なシリアル化の失敗
非常に厳密にテストした Excel をシステムにインポートしています。最近、散発的なシリアライゼーション エラーに気付きました。
これらのエラーは、同じファイルを何度も使用して、インポートに対する自動テストでポップアップしています。毎回このエラーが発生する場合は理解できますが、同じシリアライゼーション プロセスが 1 回失敗し、次は失敗しないというのは奇妙に思えます。
c++ - boost::archive::binary_(i/o)archive の移植性
ブースト バイナリ アーカイブは、ある Linux x86_64 マシンから別の Linux x86_64 マシンに "移植可能" ですか?
ドキュメントは、用語を使用してそれを示唆していますがnative binary
、私はまだそれを行うことができませんでした. 「私のせい」なのか、それともありえないのか。
ポータブル バイナリ アーカイブについては知っていますが、十分にテストされていないことは理解しています...
編集: SoapBox の回答に加えて、両方のマシンでブースト ライブラリのバージョンを同じにする必要があることがわかりました。
c# - .NETでのシリアル化
私の仕事は、オブジェクトをシリアル化および逆シリアル化することでした。
私は知りたいです:
- 私のオブジェクトが私がやっている方法でシリアル化されているかどうか
- オブジェクトがシリアル化または逆シリアル化されていることを知る方法
Serializeメソッドでオブジェクトを渡す代わりに、を渡しobject.properties
ます。これは何らかの影響を及ぼしますか?
c# - 可変F#レコードのバイナリシリアル化
バイナリシリアル化を使用して、C#クラスからF#レコードを保存しました。すべて正常に動作します:
F#:
C#:
現在、F#モジュールをリファクタリングしており、シリアル化するための可変レコードが必要です。
この方法でファイルが作成されますが、逆シリアル化しようとするとnullオブジェクトが返されます。
追加された可変キーワードを除いて、以前の実装は何も変更していません。
私の質問は、可変F#レコードのシリアル化に何か問題がありますか?または、シリアル化自体は正しいので、コードのどこかで別のエラーを探す必要がありますか?
編集:
提案された@Brianのような方法でレコードにアクセスしても、機能しないようです。
詳細は次のとおりです。以前に保存したオブジェクトをこの方法で逆シリアル化すると(game_stateが可変であると宣言されていなくても機能します):
次の例外が発生します。
FSharp.Core.dllの「System.ArgumentNullException」
c# - Constructor が呼び出されない場合の明示的な BinaryFormatter シリアル化
私の問題に関するいくつかの背景:ISerializable
私は実装し、明示的なBinaryFormatter
メソッド
を使用してシリアル化されるように設計さ
れた多くのクラスを持っています:.ctor(SerializationInfo info, StreamingContext context)
そして、オブジェクトを逆シリアル化するときに常にコンストラクターを呼び出すとは限らないvoid GetObjectData(SerializationInfo info, StreamingContext context)
ことを最近発見しました。BinaryFormatter
おそらく、BinaryFormatter
オブジェクトグラフをビットごとにメモリにコピーすることになっているため、「構築済み」オブジェクトのコンストラクターは呼び出されません。OnDeserialized
これは私にとってはうまくいきません:が呼び出され、コンストラクターが実行されていない場合、私のプライベート メンバーは常に null 参照です。によって収集されたシリアル化されたデータを引き続き取得できれば、これは解決される可能性がありますが、オブジェクトGetObjectData
へのアクセスを許可するコンストラクターしか見つかりません。SerializationInfo
私の質問:
以外.ctor(SerializationInfo info, StreamingContext context)
に、収集された値を取得する方法はありますvoid GetObjectData(SerializationInfo info, StreamingContext context)
か?
または:BinaryFormatter
コンストラクターを呼び出すかどうかを決定する
方法の手がかりはありますか? BinaryFormatter
常にコンストラクターを使用するように強制できれば、問題は解決すると思います。