XSD.exe и "Циркулярные ссылки групп"

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

Когда я использую инструмент XSD.exe из Visual Studio, процесс не сообщает о следующей ошибке

"Группа" SegGroupOrSegmentGrouping "из targetNamespace = '' имеет неверное определение: Ссылка на круговую группу.

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

Ответы

Ответ 1

У меня была эта же проблема в последнее время,

Мне была предоставлена ​​схема от сторонней компании, которая возвращала структуру xml из веб-службы. Затем я хотел отменить сеанс ответа и сохранить информацию в базе данных с NHibernate.

Без проблем я думал, что просто использую xsd.exe, и у меня будут свои классы. К сожалению, этого не было. Ошибка Xsd.exe с той же ошибкой, которую вы получаете. Это связано с тем, что он не может разрешить циклические ссылки.

Я потратил несколько дней на альтернативные варианты, пока в конце я не написал свою собственную структуру классов для схемы и не смог отлично десериализоваться. Ответ здесь - написать свои собственные классы С# и украсить их соответствующими атрибутами.

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

Мне потребовалось около 3 дней, чтобы написать структуру класса (она была большой), но я получил качественное решение.

Одно можно сказать наверняка, что вы не сможете использовать xsd.exe и большинство других инструментов, которые я пробовал после того, как он выполнил эту операцию, либо не работал должным образом, либо был неисправен.

Ответ 2

Попробуйте использовать svcutil; он может обрабатывать циклические ссылки.

В следующем примере eExact-Schema.xsd - это XSD, который xsd.exe не может обрабатывать.

Пример:

C:\SRC\Exact>svcutil eExact-Schema.xsd /language:C# /dataContractOnly /importxmltypes /out:exact.cs

Это всегда хорошее место для начала; теперь вы можете использовать этот класс и изменять его в соответствии с вашим стилем/потребностями, добавлять комментарии и т.д., и это сэкономит вам много времени/поиска, сделав все это с нуля.

Ответ 3

Попробовав несколько сторонних инструментов, я обнаружил, что Liquid Technologies имеет очень надежный генератор, называемый Liquid XML Data Binder 2012. Он смог справиться с проблемой обращения к круглым группам, с которой я столкнулся. Он может генерировать код практически для любой версии .net от 2.0. Создаваемые классы зависят от распространяемой DLL, которую они предоставляют. Я использую пробную версию, и я не удивлюсь, если покупка полной версии будет необходима, прежде чем я выйду на выпуск. Однако, сохранив, вероятно, сотню часов или более ошибок, связанных с ручным кодированием, я не могу жаловаться.

Ответ 4

Самый простой способ для меня - создать XSD файл из фактического XML файла с XSD.EXE. Затем создайте класс из нового файла XSD. Вам может потребоваться периодически изменять класс, если введены узлы или типы, которых не было в исходном XML, но вы сэкономите время HOURS времени кодирования!!!!