Cannot serialize member 'Objects' of type 'System.Collections.Generic.IList`1....
Hoy me he encontrado con este problema, trantado de serializar un objeto a xml, por alguna razón no se pueden serializar objetos que contengan atributos Ilist.
La foma de la que estaba trantando es la siguiente
y obviamente ejecuto esto desde un test unitario como el que sigue:
Pero al momento de ejecutar el test me da el siguiente error "Cannot serialize member 'Person' of type 'System.Collections.Generic.IList`1....." para lograr que la serializacion no se este error, tuve simplemente ignorar la propiedad que contiene el Ilist y generar otra que retorne una arreglo de direcciones quedando de la siguiente forma:
Notar que el resultado de la serializacion es enviada a la salida de la consola y no se realiza ningún trabajo con ella.
Otro aspecto importante es que la clase Address debe contener el atributo [Serializable]
--
Atte.
Victor Hugo Saavedra
http://vhspiceros.blogspot.com
La foma de la que estaba trantando es la siguiente
[Serializable]
public class Person{
public Person (){
Address = new list<Address>();
}
public String Name{set;get;}
public IList<Address> Address {set;get;}
public void ToXml() {
var serializer = new XmlSerializer(typeof(Voucher));
var writer = new XmlTextWriter(Console.Out);
serializer.Serialize(writer, this);
}
}
y obviamente ejecuto esto desde un test unitario como el que sigue:
[Test]
public void TestForPersonToXml() {
var person = new person();
Person.NAme = "victor Hugo Saavedra";
var Add = new Address();
add.street = "Alameda";
add.number = "1234";
Person.Address.add(add)
person.ToXml();
}
Pero al momento de ejecutar el test me da el siguiente error "Cannot serialize member 'Person' of type 'System.Collections.Generic.IList`1....." para lograr que la serializacion no se este error, tuve simplemente ignorar la propiedad que contiene el Ilist y generar otra que retorne una arreglo de direcciones quedando de la siguiente forma:
[Serializable]
public class Person{
public Person (){
Address = new List<Adress>();
}
public String Name{set;get;}
[XmlIgnore]
public IList<Adress> Address {set;get;}
[XmlArray("Address"), XmlArrayItem("address")]
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
private Address[] AddressXml{
get{
var foo = Address as List<Address>;
return foo != null ? foo.ToArray() : null;
}
set{
Address = null == value ? null : new List<Address>(value);
}
}
public void ToXml() {
var serializer = new XmlSerializer(typeof(Voucher));
var writer = new XmlTextWriter(Console.Out);
serializer.Serialize(writer, this);
}
}
Notar que el resultado de la serializacion es enviada a la salida de la consola y no se realiza ningún trabajo con ella.
Otro aspecto importante es que la clase Address debe contener el atributo [Serializable]
--
Atte.
Victor Hugo Saavedra
http://vhspiceros.blogspot.com
Comentarios
Publicar un comentario