.net - utiliza - ¿Cómo deserializar un documento XML con un espacio de nombres prefijado pero sin elementos con prefijo ns?
para que sirve el namespace en xml (2)
Tengo un documento XML de una fuente externa.
<?xml version="1.0" encoding="utf-8"?>
<ns0:Info xmlns:ns0="http://www.ZomboCorp.com/">
<Name>Anthony</Name>
<Job>Developer</Job>
</ns0:Info>
Necesito deserializarlo en un objeto como este.
public class Info
{
public String Name { get; set; }
public String Job { get; set; }
}
Usado como está, el Serializer
arroja una InvalidOperationException
<Info xmlns=''http://www.ZomboCorp.com/''>
no se esperaba.
Si agrego [XmlElement(Namespace = "http://www.ZomboCorp.com/")]
a la definición de clase, el Serializer
devuelve un nuevo objeto Info
con propiedades nulas.
También debe agregar el atributo XmlElement a cada propiedad, estableciendo la propiedad Espacio de nombres en una cadena vacía (ya que el espacio de nombre no se hereda en su situación).
Su definición de información debería verse así:
XmlRoot(Namespace = "http://www.ZomboCorp.com/")]
public class Info
{
[XmlElement(Namespace = "")]
public String Name { get; set; }
[XmlElement(Namespace = "")]
public String Job { get; set; }
}
Entonces se deserializará correctamente.
Usé xsd.exe (una herramienta VS) y generé un esquema del archivo XML y luego un archivo de clase del esquema. Sugirió
[XmlType(AnonymousType = true, Namespace = "http://www.ZomboCorp.com/")]
[XmlRoot(Namespace = "http://www.ZomboCorp.com/", IsNullable = false)]
public class Info
{
[XmlElement(Form = XmlSchemaForm.Unqualified)]
public String Name { get; set; }
[XmlElement(Form = XmlSchemaForm.Unqualified)]
public String Job { get; set; }
}
Pero, pude salirme con la mía
[XmlType(AnonymousType = true)]
[XmlRoot(Namespace = "http://www.ZomboCorp.com/")]
public class Info
{
[XmlElement(Form = XmlSchemaForm.Unqualified)]
public String Name { get; set; }
[XmlElement(Form = XmlSchemaForm.Unqualified)]
public String Job { get; set; }
}