c# .net vb.net events binary-serialization

c# - ¿Cómo ignorar el miembro de la clase Evento para la serialización binaria?



.net vb.net (3)

Cómo lo he hecho en el pasado para proyectos es implementar la interfaz IXmlSerializable y controlar mi serialización manualmente. Creo que esto hace que la serialización de los controles basados ​​en GUI (con muchos eventos) sea mucho más fácil.

IXmlSerializable

Necesito evitar la serialización de un miembro de clase de evento porque cuando el evento es manejado por un objeto que no está marcado como serializable, la serialización fallará.

Intenté usar el atributo No serializado en el miembro de la clase Evento pero no se compila. Esta línea de código:

<NonSerialized()> Public Event PropertyValueChanged()

produce el siguiente error:

El atributo ''NonSerializedAttribute'' no se puede aplicar a ''PropertyValueChanged'' porque el atributo no es válido en este tipo de declaración.

Public Event PropertyValueChanged() '' compiles but needs the extra handling described below

¿Hay alguna otra manera de evitar la serialización de los miembros del evento?

Esto no es un problema si el evento no se maneja y puedo solucionarlo clonando los objetos (e ignorando el evento) antes de serializarlos. Solo me pregunto si hay una mejor manera.

Gracias.


En C # puede hacer esto como se muestra a continuación, así que espero que esto se traduzca de manera idéntica a VB.

Tenga en cuenta que esto solo se aplica a eventos similares a campos (es decir, donde no tiene su propio add / remove ):

[field: NonSerialized] public event EventType EventName;

De lo contrario algo como:

[NonSerialized] EventType backingField; public event EventType { add { backingField += value; } remove { backingField -= value; } }


No funciona porque el compilador genera un campo de respaldo para el evento. Para habilitarlo, simplemente prefija su atributo con el campo:

[field: NonSerialized] public event EventHandler PropertyValueChanged;