ich benutzerdefinierte Serialisierung Artikel über Msdn Lesen: http://msdn.microsoft.com/en-us/library/ty01x675%28VS.80%29.aspxOnSerializingAttribute vs ISerializable
Es wird erwähnt, dass es zwei Möglichkeiten gibt der individuelle Serialisierung Implementierung:
1, mit OnDeserializedAttribute, OnDeserializingAttribute, OnSerializedAttribute, OnSerializingAttribute
2, implementieren ISerializable
Schnittstelle
Nach Nach MSDN ist Methode # 1 "Best Practice and Easy", aber ich verstehe nicht, wie die beiden Methoden sogar die gleiche Sache sind. Nach meinem Verständnis, die OnSerializing|OnSerialized|etc
Attribute können Sie Methoden zu bestimmten Phasen der Serialisierung haken, während Schnittstelle können Sie direkt ändern, was geht in und kommt aus SerializationInfo
. Ist das richtig?
Um meine Verwirrung in den Kontext zu bringen, wie implementieren Sie OnSerializing, um Objektfeld unter einem anderen Namen zu serialisieren? wie dem folgenden Code:
public virtual void GetObjectData(SerializationInfo info, StreamingContext context) { info.AddValue("i", n1); info.AddValue("j", n2); info.AddValue("k", str); }
aktualisieren: Obwohl Antwort Frederik Gheysels ist nicht ganz korrekt ist (mit Serializable Dekoration ist Voraussetzung für beide OnSerializing/OnDeserializing Attribute und ISerializable-Schnittstelle), hat er weist jedoch darauf hin, dass OnSerializing/OnDeserializing Attribute sind als Ergänzung von ISerializable gedacht, daher akzeptiere ich seine Antwort in diesem Punkt.
Auch in dem MSDN-Artikel, auf den verwiesen wird, gibt es einen Satz, der besagt ".... Beachten Sie jedoch, dass die Methode in dem vorherigen Abschnitt diese Methode überschreibt, um Serialisierung zu steuern" wenn auf ISerializable Schnittstelle verwiesen wird.
Bedeutet das, OnSerializing/OnDeserializing Attribute werden Methoden der ISerializable-Schnittstelle ersetzen? Oder habe ich diesen Satz falsch interpretiert? –