Как мне устранить это исключение при создании объекта XmlSerializer?

Я загрузил XML-схему для XML-схем с http://www.w3.org/2001/XMLSchema.xsd.

Затем я использовал XSD.EXE для создания класса из загруженного файла. Я позвонил в класс schema.cs.

Затем я выполнил эту строку кода:

XmlSerializer serializer = new XmlSerializer(typeof(schema));

и получил эту ошибку:

Элемент XML «аннотация» из пространства имен «http://www.w3.org/2001/XMLSchema» уже присутствует в текущей области.

Как найти повторяющийся элемент и исправить его, не нарушая схему?


person Robert Harvey    schedule 27.10.2010    source источник
comment
Может случиться так, что исключение имеет номер строки и позиции. Не могли бы вы добавить их?   -  person Pieter van Ginkel    schedule 27.10.2010
comment
@Pieter: исключение не включало номер строки, как и внутреннее исключение.   -  person Robert Harvey    schedule 27.10.2010
comment
А вы вообще не намекаете, что кидает аннотация? Я просмотрел XSD, и похоже, что есть много областей, в которых есть несколько аннотаций.   -  person Pieter van Ginkel    schedule 27.10.2010
comment
@ Питер: Нет, не знаю. Это основная проблема - это видимость.   -  person Robert Harvey    schedule 27.10.2010
comment
@ 0xA3: я пытаюсь прочитать другую схему XML и проанализировать ее.   -  person Robert Harvey    schedule 27.10.2010
comment
@eschneider: Он большой (около 1400 строк кода). Его достаточно легко сгенерировать.   -  person Robert Harvey    schedule 27.10.2010


Ответы (2)


Я думаю, что у сгенерированного класса есть недостатки.

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

/// <remarks/>
//[System.Xml.Serialization.XmlElementAttribute("annotation", typeof(annotation))]
[System.Xml.Serialization.XmlElementAttribute("Items", typeof(annotation))]
[System.Xml.Serialization.XmlElementAttribute("import", typeof(import))]
[System.Xml.Serialization.XmlElementAttribute("include", typeof(include))]
[System.Xml.Serialization.XmlElementAttribute("redefine", typeof(redefine))]
public openAttrs[] Items {
    get {
        return this.itemsField;
    }
    set {
        this.itemsField = value;
    }
}
person Eric Schneider    schedule 27.10.2010
comment
Я использовал более раннюю версию XSD, поэтому я снова запустил ее, используя версию, на которую вы ссылаетесь, и провел сравнение файлов. Единственными различиями между двумя файлами были версии атрибутов CompilerGenerated, поэтому я не стал тестировать новый файл. Странный. Я протестирую новый файл и дам вам знать. - person Robert Harvey; 27.10.2010
comment
Я думаю, что проблема все еще существует (прерывание при всех ошибках было отключено). Я думаю, что сгенерированный класс плохой ... - person Eric Schneider; 27.10.2010
comment
Да, было то же исключение. - person Robert Harvey; 27.10.2010

Поскольку элементы аннотации - это просто комментарии, вы можете попробовать просто отфильтровать их все. Просто сначала загрузите XML в XDocument и удалите все элементы аннотации.

person Pieter van Ginkel    schedule 27.10.2010
comment
К сожалению, мне нужны комментарии. - person Robert Harvey; 27.10.2010
comment
Видели мой комментарий? У вас есть номера строк / позиций исключения? - person Pieter van Ginkel; 27.10.2010