Вопрос о десериализации XML в .net - PullRequest
3 голосов
/ 13 мая 2010

Я пытаюсь десериализовать XML, полученный из веб-службы, но я не знаю, как указать сериализатору, как обрабатывать этот фрагмент xml:

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

Как вы можете видеть, дочерний тег использует тот же тег, что и его родительский, я полагаю, что это неправильно, однако веб-сервис предоставляется внешней компанией, и он не изменит его, есть ли какая-либо возможность или библиотека для очистки XML или как я могу использовать атрибут в моем классе, чтобы сериализатор понял это правильно? спасибо за любую помощь.

Ответы [ 2 ]

5 голосов
/ 13 мая 2010

С сериализатором все должно быть в порядке - возможно, проблема в том, что у класса не может быть свойства, имя которого совпадает с именем самого класса. Поэтому используйте XmlElementAttribute, чтобы сопоставить его:

[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; }
}

К вашему сведению, XML на самом деле не ошибается; в спецификации нет правила, гласящего, что дочерний элемент не может иметь того же имени, что и его родительский элемент. Это может быть необычно, но все еще в силе.

0 голосов
/ 13 мая 2010

Если это на самом деле не десериализовано сериализатором XML .Net, вероятно, лучше написать свой собственный класс для его анализа. Вы можете использовать пространства имен System.Xml или System.Xml.Linq (проще).

...