Pregunta

Estoy tratando de deserializar un XML que viene de un servicio web, pero no sé cómo decirle al serializador cómo handlke este pedazo de xml:

<Movimientos>
<Movimientos>
<NOM_ASOC>pI22E7P30KWB9KeUnI+JlMRBr7biS0JOJKo1JLJCy2ucI7n3MTFWkY5DhHyoPrWs</NOM_ASOC>
<FEC1>RZq60KwjWAYPG269X4r9lRZrjbQo8eRqIOmE8qa5p/0=</FEC1>
<IDENT_CLIE>IYbofEiD+wOCJ+ujYTUxgsWJTnGfVU+jcQyhzgQralM=</IDENT_CLIE>
</Movimientos>
<Movimientos>

Como se puede ver, la etiqueta de niño utiliza la misma etiqueta como su padre, supongo que esto está mal, sin embargo el servicio web es proporcionada por una empresa externa y que no cambiará es, ¿hay alguna manera o de cualquier biblioteca para poner en orden XML o ¿cómo puedo usar un atributo en mi clase para que el serializador lo hace bien? gracias por cualquier ayuda.

¿Fue útil?

Solución

El serializador debe estar bien con ella - la cuestión es, probablemente, sólo que una clase no puede tener una propiedad que es el mismo nombre que la clase misma. Por lo tanto el uso XmlElementAttribute para hacerlo coincidir:

[XmlRoot("Movimientos")]
public class Movimientos
{
    [XmlElement("Movimientos")]
    public SomeOtherClass SomeOtherProperty { get; set; }
}

public class SomeOtherClass
{
    public string NOM_ASOC { get; set; }
    public string FEC1 { get; set; }
    public string IDENT_CLIE { get; set; }
}

Para su información, el XML no es realmente mal; no hay ninguna regla en la especificación decir que un elemento secundario no puede tener el mismo nombre que su elemento padre. Es inusual tal vez, pero sigue siendo válida.

Otros consejos

Si esto no es en realidad deserialized por el serializador XML de .Net, es probablemente mejor para escribir su propia clase para analizarlo. Puede utilizar los espacios de nombres System.XML o System.Xml.Linq (más fácil).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top