6

我有一个有点复杂的类,它可能包含也可能不包含相同类型的项目列表

Class Items
{
   List<Items> SubItems ...

}

该类本身是可序列化的,但是序列化列表中的对象将浪费大量空间,因为它们在包含在列表中之前已被序列化并添加到数据库中。

有没有一种方法可以指定列表在序列化时应表示为整数列表?

注意:这些整数将代表序列化对象所在行的主键。

4

3 回答 3

1

有没有一种方法可以指定列表在序列化时应表示为整数列表?

是的。有两个主要选项:

1)实现ISerializable -Interface,您可以在其中控制对象的序列化/反序列化方式。

或者

2)将您的列表声明为[NonSerialized]并管理一个私有成员列表,其中包含您的主键。不过,您必须自己实现加载/存储 Integer-List 的逻辑。

如果您要序列化的类很大,我建议您使用第二种方法,因为在另一种情况下,您必须手动序列化/反序列化每个属性。

于 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 回答
1

如果你只想节省空间,你可以用它DataContractSerializer来实现。它有 preserveObjectReference 选项。它不会复制相同的对象,而是只存储referenceId。
详细在这里

于 2013-08-05T20:49:18.030 回答