Инструмент Visual Studio XSD: создание коллекций, а не массивов

Я сгенерировал некоторые классы С# из XSD, используя служебную программу Visual Studio XSD, и он сгенерировал массивы для хранения набора элементов, а не один из встроенных общих Collection <T> (или связанных) классов.

Ни один из параметров командной строки, упомянутых в xsd/? упомянуть что-нибудь о генерации коллекций, а не о массивах, но я знаю, что это можно сделать с помощью прокси-классов веб-сервисов, которые генерирует Visual Studio, поэтому я решил, что это должно быть возможно.

Кто-нибудь знает, как заставить XSD-утилиту генерировать классы классов, а не массивы?

Ответ 1

Нашел этот пост при поиске ответа. Я использую этот инструмент: http://xsd2code.codeplex.com/

Ответ 2

Проблема заключается в том, что XSD является агностиком XML-языка. Он не может ничего использовать с Java или С#, которые другие не поддерживают. Массивы являются самым низким общим знаменателем.

Java-разработчики используют библиотеки OXM, такие как XStream, для маршалирования объектов в XML и обратно. Он позволяет указывать настраиваемые типы при переходе с объектов на XML. Похоже, вам нужно найти что-то подобное в инструментах .NET.

Это не ответ на ваш вопрос, но это причина, по которой я считаю, что XSD не будет выполнять эту работу. Как разработчик Java, обращающийся к XStream, вам придется искать в другом месте.

Ответ 3

Вы видели возможность использования коллекций с ссылками на службы, а не с веб-ссылками. Посмотрите на утилиту svcutil.exe. Похоже, svcutil/t: code file.xsd может сделать это для вас.

Ответ 4

В настоящее время я не знаю каких-либо инструментов, которые делают это надежно, к сожалению.

Был XSDObjectGen (или что-то в этом роде), но этот инструмент, похоже, исчез с лица киберпространства: - (

Я видел один подход, использующий XSDTidy для применения своего рода замены всех int [] в List на выходе инструмента XSD - похоже, сработал, но казался немного неуклюжим.

Здесь статья CodeProject на XSDTidy.

То, что я пытаюсь найти снова, - это сообщение в блоге джентльмена, который в основном расчленял внутреннюю работу XSD в Reflector, а затем использовал знания, которые он получил, чтобы построить свой собственный инструмент, используя много Основные классы .NET. Если я правильно помню, это было этот пост в блоге здесь ( "написание собственного xsd.exe" ). Майк не совсем делает то, что вы ищете (создавая List вместо массивов), но это может быть отправной точкой.

Марк