2008-12-11 13 views
11

Tengo una interfaz que define algunos métodos que me gustaría implementar en ciertas clases.Imposición serializable desde una interfaz sin forzar el serializado personalizado de clases en C#

 
public interface IMyInterface 
{ 
    MethodA; 
    MethodB; 
} 

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

 
public interface IMyInterface : ISerializable 
{ 
    MethodA; 
    MethodB; 
} 

... todas las clases deben ahora poner en práctica de manera explícita la serialización por lo que yo soy consciente, ya que si se 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 serializaciones personalizadas?

Gracias, Will

Respuesta

0

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.

0

Se podría escribir una regla de FxCop personalizada y validar check-ins en contra de ella.

1

Si desea utilizar la serialización predeterminada, debe 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.

10

No parece haber una manera de hacer esto, pero ojalá hubiera.

notar dos cosas: aunque

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

  • Usted hace técnicamente no es necesario el atributo Serializable , SI son utilizando un XmlSerializer porque no hace uso de gráficos de objetos.

1

escribir una clase que implementa ISerializationSurrogate y el uso que para serializar clases que no son serializables o donde no está seguro de la aplicación de serialización.

Cuestiones relacionadas