Obsolete-Attribut bewirkt, dass die Eigenschaft ignoriert wird XmlSerialization
Ich bin refactoring einige Objekte in XML serialisiert, müssen aber noch halten Sie ein paar Eigenschaften für die Abwärtskompatibilität, ich habe eine Methode, die wandelt das alte Objekt, in dem eine für mich neue und Nullen der veralteten Eigenschaft. Ich will das Obsolete
- Attribut zu sagen, andere Entwickler nicht auf diese Eigenschaft verwenden, aber es verursacht die Eigenschaft, ignoriert der XmlSerializer
.
Ähnliche Code:
[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; }
}
}
Ideen für einen workaround? Meine beste Lösung ist, um zu schreiben, veraltet in der XML-Kommentare...
Update: ich bin mit .NET 2.0
Du musst angemeldet sein, um einen Kommentar abzugeben.
BEARBEITEN: Nach dem Lesen einer MS-Connect-Artikel, es scheint, dass .Net 2.0 hat ein "feature" wo es macht ObsoleteAttribute entspricht XmlIgnoreAttribute ohne Benachrichtigung in der Dokumentation. Also werde ich revidiere meine Antwort, zu sagen, dass der einzige Weg, um Ihren Kuchen haben und ihn auch Essen in diesem Beispiel ist zu Folgen @Wird die Beratung und implementieren der Serialisierung manuell. Dies wird Ihr nur zukunftssichere Art, einschließlich Veralteter Eigenschaften in der XML. Ist es nicht schön in .Net 2.0, aber .Net 3.0+ kann das Leben leichter machen.
Vom XmlSerializer:
Andere Problemumgehung abonnieren XmlSerializer.UnknownElement, bei der Erstellung der serializer für den Datentyp, und dann die alten Daten Weg.
http://weblogs.asp.net/psteele/archive/2011/01/31/xml-serialization-and-the-obsolete-attribute.aspx
Vielleicht betrachten Sie die Methode für die Anmeldung als statische Methode in der Klasse für den Datentyp.
1) WAG: Versuchen Sie, die XmlAttributeAttribute der Eigenschaft; vielleicht wird dies überschreiben die ObsoleteAttribute
2) PITA: IXmlSerializable Implementieren
Ich habe gekämpft, mit diesem viel - es gibt keine andere Lösung als die Serialisierung manuell oder mit einem anderen serializer.
Jedoch, statt zu schreiben shims für jedes veraltete Eigenschaft, die schnell zu einem Schmerz, Sie könnte prüfen, indem eine
Obsolete
Präfix-Eigenschaft Namen (z.B.Foo
wirdObsoleteFoo
. Dies erzeugt eine compiler-Warnung aus, wie das Attribut, aber wenigstens ist es sichtbar im code.Ja, ich Stimme mit Kennzeichnung Dinge, die mit dem Namen "Veraltete" wir tun dies mit Enum-Werte
XmlElement
tag macht die Bedienung etwas deutlicher, aber Sie sind immer noch zu Problemen führen, die Umbenennung Dinge, wenn diese library-code.Können Sie versuchen Sie folgenden workaround:
fügen Sie eine Methode namens
diese aufheben können, und das obsolete-Attribut