这是一个后续问题:
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时才应设置此配置,否则会引发异常。)
我想我可以一起删除属性,但由于我正在处理一个庞大而复杂的遗留系统,我不确定副作用可能是什么。
所以我的问题是双重的:
为什么inhertied属性会破坏.NET 4.5序列化?
如果删除继承的属性,我应该期待哪些令人讨厌的副作用?
答案 0 :(得分:1)
正如优素福回答related post:
在4.5中,XmlSerializer的实现被替换为不依赖于C#编译器的实现。虽然它提供了更好的启动性能和稳定性,但您可能会遇到实现之间的兼容性问题。
使用legacySerializer的配置设置在4.0计算机上不起作用,因为相应的强类型Xml配置节类不包含此设置的占位符。
这两个问题都将在即将发布的更新中得到解决。在此之前,您可以通过在删除4.0上的开关时在4.5中设置config开关来解决此问题。