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

本文关键字:继承 属性 出错 序列化 net | 更新日期: 2023-09-27 18:01:36

这是一个后续问题:

.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"属性而引入的。到目前为止唯一有效的解决办法是让序列化器知道我想在。net中序列化。但这对我来说是个问题。(只有在目标计算机上安装了。net 4.5时才应该设置此配置,否则会引发异常)。

我想我可以把所有的属性都删除,但是因为我处理的是一个大而复杂的遗留系统,我不确定副作用是什么。

所以我的问题是双重的:

  1. 为什么继承的属性会破坏。net 4.5的序列化?

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

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

正如Youssef在相关帖子上的回答:

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

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

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