XmlSerializer, выбрасывающий InvalidOperationException - PullRequest
2 голосов
/ 26 марта 2010

У меня есть объект XmlSerializer, и я добавил 2 обработчика событий для событий UnknownElement и UnknownAttribute, как показано ниже:

XmlSerializer xs = new XmlSerialiser(typeof(MyClass));
xs.UnknownAttribute += new XmlAttributeEventHandler(xs_UnknownAttribute);
xs.UnknownElement += new XmlElementEventHandler(xs_UnknownAttribute);

Каждый из этих обработчиков событий в основном делает одно и то же: они распечатывают имя узла или имя атрибута, вызывающее проблему.

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

Обновление

Исключения составляют:

Исключение составляет: необработанное исключение: System.InvalidOperationException: в документе XML есть ошибка (5, 110).

Существует InnerException типа XmlException, в котором говорится, что начальный тег «MyTag» в строке 5 не соответствует конечному тегу «AnotherTag». Строка 5, позиция 110.

Ответы [ 2 ]

1 голос
/ 26 марта 2010

Не видя определения MyClass и XML, который вы пытаетесь прочитать, трудно дать однозначный ответ. Тем не менее, текст исключения довольно очевиден, разметка XML имеет неправильный формат, а не содержит неизвестный элемент или атрибут, например:

<AnotherTag>
  <MyTag>
  </AnotherTag>   <--- This should be </MyTag>
</MyTag>          <--- This should be </AnotherTag>

Обработчики UnknownAttribute / UnknownElement не поймут это, потому что структура XML в корне неверна. Эти события нельзя вызывать до тех пор, пока документ XML не будет успешно проанализирован в дереве узлов, дочерних узлов, атрибутов и т. Д.

Просто для дальнейшего объяснения немного о UnknownAttribute / UnknownElement; если бы вашему классу / XML было разрешено содержать только элементы с именами Field1 и Field2 , вы бы обнаружили событие UnknownElement, если у вас был элемент с именем Field3 ваш XML. InvalidOperationException вызывается, потому что XML не является XML, событие UnknownElement вызывается, потому что в XML есть элемент, который является неожиданным, хотя XML в противном случае допустим.

0 голосов
/ 26 марта 2010

Два события, которые вы обрабатываете, не имеют ничего общего с ошибками в структуре документа XML.

Я постараюсь помочь вам с конкретной проблемой, как только вы опубликуете конкретное исключение. Возможно, вам даже понадобится опубликовать XML.


Судя по частичному исключению, которое вы опубликовали, видно, что ваш документ содержит недопустимый XML (несоответствующие теги) Нет никакого способа обнаружить этот недостаток, чтобы поймать исключение.

...