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