2011-01-22 10 views
5

Hola Estoy tratando de serializarC# No es capaz de serializar la clase con la lista <CustomObject> como propiedad

FileStream fileStream = new FileStream("batches.xml", FileMode.Open); 
XmlSerializer serializer = new XmlSerializer(typeof(List<Batche>)); 
List<Batche> listOfBatches = new List<Batche>(); 

[Serializable] 
[XmlRoot("Batch")] 
public class Batche 
{ 

    [XmlElement("Title")] 
    public string Title 
    { 
     get;set; 
    } 

    [XmlArray("ListOfLinks"),XmlArrayItem("Link",Type = typeof(Link))] 
    public List<Link> Links 
    { 
     get;set; 
    } 
} 

[Serializable] 
[XmlRoot("Link")] 
public class Link 
{ 
    [XmlElement("Uri")] 
    public Uri Uri 
    { 
     get; 
     set; 
    } 

    [XmlElement("Status")] 
    public string Status 
    { 
     get; 
     set; 
    } 

} 

Conseguir siguiente error: Hubo un error que refleja el tipo 'System.Collections.Generic.List` 1 [DownloadTRON.Entities.Batche] '.

estado probando esto desde las últimas 4 horas, puede cualquier cuerpo señalar lo que estoy haciendo mal!

Saludos Pravin

+0

Esto podría ayudar a http: // stackoverflow. com/questions/1212742/xml-serialize-generic-list-of-serializable-objects – btlog

Respuesta

4

No hay problema con el código o la serialización de los genéricos. Uri no tiene un constructor predeterminado y no se puede serializar. Considere cambiarlo a una cadena y las cosas funcionarán. Si solo planea utilizar XmlSerializer, puede eliminar el atributo Serializable porque no se usa.

Cuando ejecuté su código con el depurador y vi la excepción, había una excepción interna con una excepción interna con una excepción interna y así sucesivamente. Siempre es una buena idea seguir a ese conejo por el agujero cuando puedas.

+0

Gracias, acabo de reemplazar a Uri por una cuerda y funcionó como un amuleto – Pravin

2

Tienes que pasar tipos adicionales que están en XML, a XmlSerializer, en su caso, el tipo de enlace. Utilice esta

XmlSerializer serializer = new XmlSerializer(typeof(List<Batche>), new Type[] {typeof(Link)}); 
+0

Copié y pegué este código en mi programa de prueba y me da una InvalidOperationException. Siguiendo la cadena de excepciones internas, la raíz del problema sigue siendo el Uri sin un constructor predeterminado. –

+0

Sí, estaba a punto de agregarlo yo mismo. Él debería reemplazar a Uri con una Cadena. Y también debe especificar todos los tipos adicionales que se están deserializando aparte de los Lotes (en el ctor XmlSerializer). –

2

sus propias clases deben implementar un constructor público sin parametros, por ejemplo para la clase de Enlace debe implementar un constructor adicional

Enlace pública() {}

Cuestiones relacionadas