He creado un componente no visual en C#, que está diseñado como un marcador de posición para metadatos en un formulario.
El componente tiene una propiedad que es una colección de objetos personalizados, este objeto está marcado como Serializable e implementa GetObjectData para serilizing y public constuctor para deserilizing.
serialización de tiempo de diseño en C#
En el archivo resx del formulario generará datos binarios para almacenar la colección, sin embargo cada vez que hago un cambio a la clase serializada obtengo errores de diseñador y necesito eliminar los datos manualmente del archivo resx y luego recrea estos datos.
He intentado cambiar el Constuctor tener un bloque try/catch alrededor de cada propiedad de la clase
try
{
_Name = info.GetString("Name");
}
catch (SerializationException)
{
this._Name = string.Empty;
}
pero todavía se bloquea. El último error que obtuve fue que tuve que implementar IConvertible.
Preferiría usar serialización xml porque al menos puedo verlo, ¿es posible para que lo use el diseñador?
¿Hay alguna manera de hacer que la serialización sea más estable y menos resistente a los cambios?
Editar:
Más información ... mejor descripción tal vez
tengo una clase que hereda de Component, que tiene una propiedad que es una colección de reglas. The RulesCollection parece tener que marcarse como Serializable, de lo contrario no conserva sus miembros.
La clase Rules es también un Componente con el atributo DesignTimeVisible (falso) para detenerlo en la bandeja de componentes, este clas no está marcado como Serializable.
Tener la colección marcada como Serializable genera datos binarios en el archivo resx (no es ideal) y el IDE informa que la clase Rules no se puede serializar.
Creo que este problema va más allá de una simple pregunta. Entonces probablemente lo cerraré en breve.
Si alguien tiene algún enlace a algo similar que ayudaría mucho.
Parece que este método también produce datos serializados binarios, además de cada objeto de la colección está representado en la bandeja de componentes – benPearce
evitar que aparece en la bandeja utilizando ... [ToolboxItem (false)] ... en la clase. Uso este enfoque todo el tiempo y no obtengo datos binarios. Entonces debes estar haciendo algo que obligue a que eso suceda. ¿Puedes publicar un fragmento de código? –