6

同じタイプのアイテムのリストを含む場合と含まない場合がある、やや複雑なクラスがあります

Class Items
{
   List<Items> SubItems ...

}

クラス自体はシリアライズ可能ですが、リストに含まれる前にオブジェクトがシリアライズされてデータベースに追加されるため、リスト内のオブジェクトをシリアライズするための膨大なスペースの無駄になります。

シリアル化されたときにリストを整数のリストとして表すように指定する方法はありますか?

注: これらの整数は、シリアル化されたオブジェクトが配置されている行の主キーを表します。

4

3 に答える 3

1

スペースを節約したいだけなら、 を使用DataContractSerializerしてそれを達成できます。preserveObjectReference オプションがあります。同じオブジェクトを複製せず、referenceId のみを保存します。
詳細はこちら

于 2013-08-05T20:49:18.030 に答える
1

シリアル化されたときにリストを整数のリストとして表すように指定する方法はありますか?

うん。主なオプションは 2 つあります。

1) ISerializable -Interface を実装します。ここで、オブジェクトをシリアル化/逆シリアル化する方法を制御できます。

また

2)リストを[NonSerialized]として宣言し、プライマリ キーを含むプライベート メンバー リストも管理します。ただし、整数リストをロード/保存するためのロジックを独自に実装する必要があります。

シリアル化するクラスが非常に大きい場合は、2 番目の方法をお勧めします。それ以外の場合は、各プロパティを手動でシリアル化/逆シリアル化する必要があるためです。

于 2013-08-05T20:37:58.337 に答える
1

オブジェクトのシリアル化方法を指定するには、ISerializable を実装し、次の実装を提供する必要があります。GetObjectData

public virtual void GetObjectData(SerializationInfo info, StreamingContext context) 
{

}

この MSDN ページに簡単な例があります。

http://msdn.microsoft.com/en-us/library/ms973893.aspx

于 2013-08-05T20:38:44.580 に答える