gpt4 book ai didi

c# - 过时的属性导致属性被 XmlSerialization 忽略

转载 作者:IT王子 更新时间:2023-10-29 03:49:03 28 4
gpt4 key购买 nike

我正在重构一些序列化为 XML 但需要保留一些属性以实现向后兼容性的对象,我有一种方法可以为我将旧对象转换为新对象并使过时的属性为空。我想使用 Obsolete 属性告诉其他开发人员不要使用此属性,但它会导致该属性被 XmlSerializer 忽略。

类似代码:

[Serializable]
public class MySerializableObject
{
private MyObject _oldObject;
private MyObject _anotherOldObject;

private MyObject _newBetterObject;

[Obsolete("Use new properties in NewBetterObject to prevent duplication")]
public MyObject OldObject
{
get { return _oldObject; }
set { _oldObject = value; }
}

[Obsolete("Use new properties in NewBetterObject to prevent duplication")]
public MyObject AnotherOldObject
{
get { return _anotherOldObject; }
set { _anotherOldObject = value; }
}

public MyObject NewBetterObject
{
get { return _anotherOldObject; }
set { _anotherOldObject = value; }
}
}

关于解决方法的任何想法?我最好的解决方案是在 XML 注释中写 obsolete...

更新:我正在使用 .NET 2.0

最佳答案

编辑:After reading a MS Connect article ,似乎 .Net 2.0 有一个“功能”,它使 ObsoleteAttribute 等同于 XmlIgnoreAttribute,而文档中没有任何通知。所以我要修改我的答案,说在这种情况下吃蛋糕和吃蛋糕的唯一方法是遵循@Will 的建议和 implement serialization manually .这将是您在 XML 中包含过时属性的唯一 future 证明方式。它在 .Net 2.0 中并不漂亮,但 .Net 3.0+ 可以让生活更轻松。

来自 XmlSerializer :

Objects marked with the Obsolete Attribute no longer serialized In the .NET Framework 3.5 the XmlSerializer class no longer serializes objects that are marked as [Obsolete].

关于c# - 过时的属性导致属性被 XmlSerialization 忽略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/331013/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com