在C#中实现接口ISerializable
时,我们提供了一个构造函数,它需要一个SerializationInfo
对象,然后用各种GetInt32
,GetObject
等方法来查询它,以填充我们试图反序列化的对象的字段。为什么SerializationInfo没有TryGetValue方法?
实现这个接口,而不是仅仅使用[Serializable]
属性,是为了向下兼容的一个主要的原因是:如果我们在某个时候添加新的字段到类,我们可以赶上通过序列化,旧版本抛出的SerializationException
并以适当的方式处理它们。
我的问题如下:为什么我们必须使用这些例外来控制流量?如果我正在反序列化大量前一段时间保存的类,那么每个类中可能每个缺失的字段都会抛出异常,从而导致性能很差。
为什么SerializationInfo
类不提供TryGetValue
方法,如果名称字符串不存在,它将简单地返回false
?
向谁实施那个类 – 2009-11-04 11:32:54
也许他们在这里:P – 2009-11-04 11:43:19