2013-02-28 32 views
0

这是一个后续问题:错误序列化继承财产在.NET 4.5

Serialization breaks in .NET 4.5

我在这是造成我的悲伤中的序列化的.NET 4.5的遗留代码的属性。

这是属性:

[EditorBrowsable(EditorBrowsableState.Never), Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] 
    private new object Value 
    { 
     get 
     { 
      return base.Value; 
     } 
     set 
     { 
      base.Value = value; 
     } 
    } 

这可能是引入试图隐藏基类的“值”属性。 到目前为止,唯一的解决方案是让 让序列化程序知道我想在.NET4中序列化。 但这对我来说是个问题。 (只有在.NET 4.5安装在Traget计算机上时,才应该设置此配置,否则会引发异常)。

我想我可以一起删除属性,但由于我正在处理一个庞大而复杂的遗留系统,我不知道副作用可能是什么。

所以我quesion是双重的:

  1. 为什么inhertied财产中断.net 4.5序列化?

  2. 如果我删除继承的属性,我应该期待什么讨厌的副作用?

回答

1

作为优素福回答上related post

在4.5,XmlSerializer的执行用一个不依赖于C#编译器代替。虽然它提供了更好的启动性能和稳定性,但您可能会遇到实现之间的兼容性问题。

使用legacySerializer的配置设置不适用于4.0机器,因为对应的强类型Xml配置节类不包含此设置的占位符。

这两个问题都将在即将到来的更新中解决。在此之前,您可以通过在4.5中将配置开关设置为4.0来解决该问题。

+0

谢谢。如果我将编译类型更改为4.5,这是否可行?因为在这种情况下,旧版本的标记将无济于事,因为这是在4.5版本中编译的4.0否 – 2013-03-14 18:30:55

+0

如果您在4.5运行时运行4.5/4.0目标应用程序,则此开关运行良好。但是,如果您在纯4.0机器上运行4.0目标应用程序,交换机将失败。但是,如果您在纯4.0运行时运行应用程序,则不需要此配置开关,因为您的解串器在此处已经正常工作。所以你只需要根据你的机器的运行时间有条件地配置这个配置开关。 – Praburaj 2013-03-14 19:07:23