为什么SerializationInfo没有TryGetValue方法?

Joe*_* Gö 16 c# serialization exception

当实现ISerializable在C#中的接口,我们提供一个构造函数,需要一个SerializationInfo对象,然后用各种查询时GetInt32,GetObject为了填补对象的,我们正在尝试反序列化领域等方法.

实现此接口的一个主要原因,而不仅仅是使用[Serializable]属性,是为了向后兼容:如果我们在某个时刻向类中添加了新字段,我们可以捕获SerializationException序列化的旧版本的类,并处理他们以适当的方式.

我的问题如下:为什么我们必须将这些例外用于控制流程?如果我反序列化大量前一段时间保存的类,可能每个类中的每个缺失字段都会抛出异常,从而导致性能非常差.

为什么SerializationInfo类不提供TryGetValuefalse在名称字符串不存在时才会返回的方法?

Mar*_*ell 26

您可以遍历可用字段并使用switch,但是......

            foreach(SerializationEntry entry in info) {
                switch(entry.Name) {
                    ...
                }
            }
Run Code Online (Sandbox Code Playgroud)

或者你可以使用protobuf-net ;-p

  • 凉; 这似乎没有记录在VS2008文档中. (2认同)
  • @Michael除了[here](http://msdn.microsoft.com/en-us/library/system.runtime.serialization.serializationinfo.getenumerator.aspx)当然,或者(@Joel)回到1.1,[这里](http://msdn.microsoft.com/en-us/library/system.runtime.serialization.serializationinfo.getenumerator(v = VS.71)的.aspx) (2认同)