serialized serialize deserialize clase attribute and c# interface serialization

deserialize - serialize attribute c#



AplicaciĆ³n serializable desde una interfaz sin obligar a las clases a serializar de forma personalizada en C# (5)

Tengo una interfaz que define algunos métodos que me gustaría implementar en ciertas clases.

public interface IMyInterface { MethodA; MethodB; }

Además, me gustaría que todas las clases que implementan esta interfaz sean serializables. Si cambio la definición de la interfaz para implementar ISerializable como a continuación ...:

public interface IMyInterface : ISerializable { MethodA; MethodB; }

... todas las clases ahora deben implementar explícitamente la serialización, hasta donde yo sé, ya que si implementa ISerializable debe implementar el miembro GetObjectData (y el constructor necesario para deserializar).

¿Cómo puedo insistir en que las clases que usan mi interfaz sean serializables, pero sin forzarlas a implementar la serialización personalizada?

Gracias, Will


Puede escribir una regla FxCop personalizada y validar los registros contra ella.


Si desea utilizar la serialización predeterminada, entonces necesita agregar SerializableAttribute. Una alternativa sería usar una clase abstracta en lugar de una interfaz, luego agregar SerializableAttribute a la clase abstracta. Si está implementando su propia serialización personalizada, entonces quiere implementar ISerializable, de lo contrario, quédese con SerializableAttribute.


Gracias por las respuestas Sería bueno poder obligar a las clases derivadas de una interfaz a implementar la serialización sin que esto los fuerce a serializar, pero parece que no es posible.


No parece haber una manera de hacer esto , pero desearía que hubiera.

Sin embargo, tenga en cuenta dos cosas:

  • El atributo Serializable no se puede heredar de una clase base , incluso si la clase base está marcada como abstracta.

  • Técnicamente no necesita el atributo Serializable, SI está utilizando un XmlSerializer porque no hace uso de gráficos de objetos.


Escriba una clase que implemente ISerializationSurrogate y la use para serializar las clases que no son serializables o en las que no está seguro de la implementación de la serialización.