1

http://msdn.microsoft.com/en-us/library/4abbf6k0.aspxで基本的なシリアル化の (変更および簡略化された) MSDN の例を試しました。

//the class :
[Serializable]
public class MyObject {
  public byte n1 = 0;
  public byte n2 = 0;
}

//The code
MyObject obj = new MyObject();
obj.n1 = 1;
obj.n2 = 24;
IFormatter formatter = new BinaryFormatter();
Stream stream = new FileStream("MyFile.bin", FileMode.Create, FileAccess.Write, FileShare.None);
formatter.Serialize(stream, obj);
stream.Close();    

だから、私は 2 バイトを見つけることを期待しています: 0x01 0x18 で MyFile.bin です
が、これは好きではありません。私はこの結果を持っています:

ここに画像の説明を入力

なぜこれがすべてあるのですか。そして、どうすればやりたいことができますか。

このテストの目的は、より複雑な構造をシリアル化してバイナリ ファイルに保存することです。

4

2 に答える 2

0

Serializer は、シリアル化されたオブジェクトの型情報も格納します。この情報は逆シリアル化中に使用されるため、適切なクラスのインスタンスがインスタンス化されます。

バイナリのシリアル化については、 protobuf-netをご覧になることをお勧めします。より高速で、クラスへの変更をより適切に処理しますBinaryFormatter。独自のシリアル化メカニズムを発明するよりもおそらく安全です。

于 2013-03-22T11:40:05.180 に答える
0

.Net オブジェクトのシリアル化は複雑です。また、メタデータを格納して .Net クラスを再生成するため、クラス メンバーに従って整列されるとは思わないでください。これは独自の形式であり、.Net フレームワークのみがクラスを逆シリアル化できます。

その方法でシリアル化する場合は、デフォルトをオーバーライドするカスタムのシリアル化関数を記述し、独自のクラスをシリアル化/逆シリアル化する必要があります。

于 2013-03-22T11:41:50.560 に答える