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 времени кодирования!!!!