Clonar objeto

05/10/2009 - 22:38 por Alberto | Informe spam
Tengo un control de usuario (se llama árbol) que desciende de Panel y me
gustaría poder clonarlo para lo que escribí el siguiente método:

public Árbol Clone()
{
MemoryStream ms = new MemoryStream();

BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(ms, this);

ms.Position = 0;
Árbol obj = (Árbol)bf.Deserialize(ms);

ms.Close();

return obj;
}

Pero me da un error ya que dice que el panel no es serializable (al objeto
árbol le añadí el atributo [Serializable]).
¿Hay algún modo de solucionarlo o tengo que clonarlo a mano?
Gracias

Preguntas similare

Leer las respuestas

#1 Alberto Poblacion
06/10/2009 - 07:49 | Informe spam
"Alberto" wrote in message
news:
Tengo un control de usuario (se llama árbol) que desciende de Panel y me
gustaría poder clonarlo para lo que escribí el siguiente método:

public Árbol Clone()
{
MemoryStream ms = new MemoryStream();

BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(ms, this);

ms.Position = 0;
Árbol obj = (Árbol)bf.Deserialize(ms);

ms.Close();

return obj;
}

Pero me da un error ya que dice que el panel no es serializable (al objeto
árbol le añadí el atributo [Serializable]).
¿Hay algún modo de solucionarlo o tengo que clonarlo a mano?



En lugar del serializador binario podrías usar el serializador XML, que
no requiere que los objetos estén marcados como [Serializable]s. Sin
embargo, solo serializa las propiedades públicas (a diferencia del
BinaryFormatter, que también serializa las privadas), así que tendrás que
ver si con ellas es suficiente para clonar todo el estado de tu Arbol.
Respuesta Responder a este mensaje
#2 Alberto
06/10/2009 - 12:51 | Informe spam
Este control tiene en su interior otros controles de usuario (los llamo
Nodos) que son descendientes de Label.
No sé cómo va la serialización XML pero ¿al serializar el control Árbol
también se serializa su contenido?

Estos nodos simplemente están agregados al Controls del Árbol.

Muchas gracias.
"Alberto Poblacion"
escribió en el mensaje de noticias
news:%
"Alberto" wrote in message
news:
Tengo un control de usuario (se llama árbol) que desciende de Panel y me
gustaría poder clonarlo para lo que escribí el siguiente método:

public Árbol Clone()
{
MemoryStream ms = new MemoryStream();

BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(ms, this);

ms.Position = 0;
Árbol obj = (Árbol)bf.Deserialize(ms);

ms.Close();

return obj;
}

Pero me da un error ya que dice que el panel no es serializable (al
objeto árbol le añadí el atributo [Serializable]).
¿Hay algún modo de solucionarlo o tengo que clonarlo a mano?



En lugar del serializador binario podrías usar el serializador XML, que
no requiere que los objetos estén marcados como [Serializable]s. Sin
embargo, solo serializa las propiedades públicas (a diferencia del
BinaryFormatter, que también serializa las privadas), así que tendrás que
ver si con ellas es suficiente para clonar todo el estado de tu Arbol.

email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida