Десериализация XML с внутреннего узла XML - PullRequest
1 голос
/ 11 августа 2010

Я работаю над сериализацией / десериализацией моего объекта .NET. Как требование к нашим XML-файлам, объект должен находиться внутри главного узла с именем mycompany. Вот пример для файла:

<?xml version="1.0" encoding="utf-8"?>
<mycompany>
  <station>
    <serial>VAA008090067</serial>
  </station>
</mycompany>

У меня проблема с десериализацией. Я не знаю, как сказать сериализатору: «Эй, обязательно покопайся в узле mycompany, прежде чем десериализовать».

Вот мой текущий код десериализации (без учета корневого узла):

Stream binaryStream = File.Open(Filename, FileMode.Open);
XmlSerializer xformatter = xformatter = new XmlSerializer(typeof(T));
obj = (T)xformatter->Deserialize(stream);

Я попытался сделать следующий код: создать XmlTextStream, прочитать в узле заголовка файла и узле mycompany, а затем передать поток в сериализатор

Stream binaryStream = File.Open(Filename, FileMode.Open);
xmlReader = gcnew XmlTextReader(binaryStream);
xmlReader.Read(); // add error checking
xmlReader.Read(); // add error checking
xformatter = gcnew XmlSerializer(T.typeid);
obj = (T)xformatter.Deserialize(xmlReader);

Выше не работает, бросает мне XmlElement error: Root element is missing.

Я знаю, что есть простое решение, но я не могу его найти.

1 Ответ

3 голосов
/ 11 августа 2010

Измените его на

xformatter.Deserialize(xmlReader.ReadSubTree());
...