Инструмент Visual Studio XSD: создание коллекций, а не массивов - PullRequest
7 голосов
/ 08 марта 2009

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

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

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

Ответы [ 4 ]

8 голосов
/ 10 мая 2010

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

1 голос
/ 08 марта 2009

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

1 голос
/ 09 марта 2009

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

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

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

Вот статья CodeProject по XSDTidy .

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

Марк

1 голос
/ 08 марта 2009

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

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

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

...