在.NET 4.5中序列化继承的属性时出错

时间:2013-02-28 10:25:02

标签: c# .net serialization

这是一个后续问题:

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;
        }
    }

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

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

所以我的问题是双重的:

  1. 为什么inhertied属性会破坏.NET 4.5序列化?

  2. 如果删除继承的属性,我应该期待哪些令人讨厌的副作用?

1 个答案:

答案 0 :(得分:1)

正如优素福回答related post

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

使用legacySerializer的配置设置在4.0计算机上不起作用,因为相应的强类型Xml配置节类不包含此设置的占位符。

这两个问题都将在即将发布的更新中得到解决。在此之前,您可以通过在删除4.0上的开关时在4.5中设置config开关来解决此问题。