denisbednov
@denisbednov

Как десериализовать xml с разными именами корневых элементов?

Доброго времени суток!

Имеется 2 xml-файла в принципе одинаковой структуры, но с разным именованием корневых элементов и xml-определением:

Раз:
<?xml version="1.0" encoding="windows-1251"?>
    <yml_catalog date="2018-02-15 19:01">
    ...

Два:
<?xml version="1.0" encoding="UTF-8"?>
    <xml_catalog date="2018-02-15 15:54">
    ...


Для де/сериализации реализовал класс:

[Serializable]
    [XmlRoot("yml_catalog")]
    public class YmlCatalog
    {
        [XmlAttribute("date")]
        public string Date { get; set; }

        ...
    }


Можно ли каким-либо образом заставить сериализатор "перебирать" значения имён корневого элемента?
Есть подобный подход через XmlChoiceIdentifierAttribute, но он работает для XmlElement, а не для XmlRoot.

Заранее спасибо ;)
  • Вопрос задан
  • 53 просмотра
Решения вопроса 1
DarkRaven
@DarkRaven
разработка программного обеспечения
Можно сделать примерно так:
var rootName = "xml_catalog";
var ser = new XmlSerializer(typeof(YmlCatalog), 
   new XmlRootAttribute { ElementName = rootName });
var reader = XmlReader.Create("someData.xml");
var catalogue = (YmlCatalog)ser.Deserialize(reader);

Для своих классов ставите [XmlRoot] без явного указания.
Вот тут подробнее: https://stackoverflow.com/questions/17658436/deser...
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы