1

タイプに注釈を付けると[serializable]、このタイプをシリアル化できることがCLRに通知されることを理解しています。

私には、これが「ブラックボックス」の魔法のように見えるのは好きではありません。この属性でマークするとどうなるか知りたいです。

さらに、実際にオブジェクトをシリアル化しようとしたときに、それが何をするかを知っておくと役に立ちます。

PSこの質問への回答が属性の処理に関係する場合は、これを反映するように質問のタイトルと質問を自由に編集してください。ありがとう。

4

2 に答える 2

2

共通言語ランタイム(CLR)は、オブジェクトがメモリ内にどのように配置されるかを管理し、.NET Frameworkは、リフレクションを使用して自動化されたシリアル化メカニズムを提供します。オブジェクトがシリアル化されると、クラスの名前、アセンブリ、およびクラスインスタンスのすべてのデータメンバーがストレージに書き込まれます。オブジェクトは、他のインスタンスへの参照をメンバー変数に格納することがよくあります。クラスがシリアル化されると、シリアル化エンジンは、すでにシリアル化されているすべての参照オブジェクトを追跡して、同じオブジェクトが複数回シリアル化されないようにします。.NET Frameworkで提供されるシリアル化アーキテクチャは、オブジェクトグラフと循環参照を自動的に正しく処理します。オブジェクトグラフに課せられる唯一の要件は、シリアル化されるオブジェクトによって参照されるすべてのオブジェクトも、シリアル化可能としてマークする必要があるということです。これが行われない場合、

この記事のこの部分:http://msdn.microsoft.com/en-us/library/ms973893.aspx

于 2011-03-04T19:01:39.523 に答える
1

起こる唯一のことはそれtypeof(MyClass).IsSerializableが真実になるということです。if (!typeToBeSerialized.IsSerializable) throw ...次に、実際のシリアル化を行うコードにあるステートメントがあります。

于 2011-03-04T19:12:34.707 に答える