我有一个有点复杂的类,它可能包含也可能不包含相同类型的项目列表
Class Items
{
List<Items> SubItems ...
}
该类本身是可序列化的,但是序列化列表中的对象将浪费大量空间,因为它们在包含在列表中之前已被序列化并添加到数据库中。
有没有一种方法可以指定列表在序列化时应表示为整数列表?
注意:这些整数将代表序列化对象所在行的主键。
我有一个有点复杂的类,它可能包含也可能不包含相同类型的项目列表
Class Items
{
List<Items> SubItems ...
}
该类本身是可序列化的,但是序列化列表中的对象将浪费大量空间,因为它们在包含在列表中之前已被序列化并添加到数据库中。
有没有一种方法可以指定列表在序列化时应表示为整数列表?
注意:这些整数将代表序列化对象所在行的主键。
有没有一种方法可以指定列表在序列化时应表示为整数列表?
是的。有两个主要选项:
1)实现ISerializable -Interface,您可以在其中控制对象的序列化/反序列化方式。
或者
2)将您的列表声明为[NonSerialized]并管理一个私有成员列表,其中包含您的主键。不过,您必须自己实现加载/存储 Integer-List 的逻辑。
如果您要序列化的类很大,我建议您使用第二种方法,因为在另一种情况下,您必须手动序列化/反序列化每个属性。
要指定对象如何序列化,您需要实现 ISerializable 并为GetObjectData
public virtual void GetObjectData(SerializationInfo info, StreamingContext context)
{
}
这个 MSDN 页面上有一个简单的例子:
如果你只想节省空间,你可以用它DataContractSerializer
来实现。它有 preserveObjectReference 选项。它不会复制相同的对象,而是只存储referenceId。
详细在这里