estaba leyendo el artículo de serialización personalizado en MSDN: http://msdn.microsoft.com/en-us/library/ty01x675%28VS.80%29.aspxOnSerializingAttribute vs ISerializable
Se menciona que hay dos maneras de implementar serialización personalizada:
1, usando OnDeserializedAttribute, OnDeserializingAttribute, OnSerializedAttribute, OnSerializingAttribute
2, implementar ISerializable
interfaz
acuerdo Para MSDN, el método n. ° 1 es "la mejor práctica y la más fácil", pero no entiendo cómo son los dos métodos ni siquiera lo mismo. A mi entender, los atributos OnSerializing|OnSerialized|etc
le permiten conectar métodos a fases particulares de la serialización, mientras que la interfaz ISerializable
le permite modificar directamente lo que entra y sale del SerializationInfo
. ¿Es esto correcto?
Para poner mi confusión en contexto, ¿cómo se implementa OnSerializing para serializar el campo de objeto con un nombre diferente? como el siguiente código:
public virtual void GetObjectData(SerializationInfo info, StreamingContext context) { info.AddValue("i", n1); info.AddValue("j", n2); info.AddValue("k", str); }
actualización: A pesar de la respuesta de Frederik Gheysels no es completamente correcta (la decoración con Serializable es pre-requisito para ambos OnSerializing/OnDeserializing atributos y la interfaz ISerializable), lo hizo sin embargo señala que OnSerializing/Los atributos OnDeserializing están destinados a ser un suplemento de ISerializable, por lo que estoy aceptando su respuesta en este punto.
También en el artículo de MSDN mencionado, hay una oración que dice ".... Tenga en cuenta, sin embargo, que el método en la sección anterior reemplaza este método para controlar la serialización" al referirse a la interfaz ISerializable.
¿Significa que los atributos OnSerializing/OnDeserializing reemplazarán a los métodos de la interfaz ISerializable? ¿O malinterpreté esta oración? –