Estoy intentando crear un clon profundo de un objeto utilizando el siguiente método.diferencia entre el atributo DataContract y el atributo Serializable en .net
public static T DeepClone<T>(this T target)
{
using (MemoryStream stream = new MemoryStream())
{
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(stream, target);
stream.Position = 0;
return (T)formatter.Deserialize(stream);
}
}
Este método requiere un objeto que se serializa es decir, un objeto de una clase que está teniendo un atributo "Serializable" en él. Tengo una clase que tiene el atributo "DataContract" pero el método no funciona con este atributo. Creo que "DataContract" también es un tipo de serializador pero quizás diferente de "Serializable".
¿Alguien puede darme la diferencia entre los dos? Además, avíseme si es posible crear un clúster profundo de un objeto con solo 1 atributo que haga el trabajo de los atributos "DataContract" y "Serializable" o una forma diferente de crear un deepclone.
Por favor ayuda!
Gracias por la respuesta @Oded. Solo una pregunta aquí. Esta clase se está utilizando en mi Servicio WCF. Estoy consumiendo este servicio en mi proyecto de consumidor agregando la referencia de servicio del servicio. Siempre que haya un cambio en el Servicio, necesito actualizar la referencia del servicio. Cuando uso los atributos y luego actualizo el servicio, .net crea 2 propiedades con el mismo nombre en la clase Reference.cs de la Referencia del servicio. 1 cada uno para el atributo "DataMember" y "Serializable". Esto crea un error de compilación. ¿Algún trabajo para esto? – samar
@samar - Hasta donde sé, 'Serializable' se ignorará si se usa' DataContract'. Nunca he oído hablar del problema que tienes. – Oded