Есть ли способ экспортировать схему XSD из DataContract - PullRequest
9 голосов
/ 09 апреля 2010

Я использую DataContractSerializer для сериализации / десериализации моих классов в / из XML. Все работает нормально, но в какой-то момент я хотел бы установить стандартную схему для формата этих файлов XML независимо от реального кода. Таким образом, если что-то ломается в процессе сериализации, я всегда могу вернуться и проверить, какой должна быть стандартная схема. Или, если мне нужно изменить схему, изменение является явным решением, а не последующим изменением моего кода.

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

Существует ли какая-либо связь между DataContract и схемой XSD. Есть ли способ экспортировать атрибуты DataContract в классах в виде схемы XSD?

Ответы [ 3 ]

7 голосов
/ 02 мая 2013

Да, вы можете использовать XsdDataContractExporter .

Пример приведен в статье MSDN Экспорт схем из классов .

4 голосов
/ 09 апреля 2010

Возможно, вы сможете сгенерировать файлы схемы из DataContracts с помощью инструмента svcutil.exe, поставляемого с Visual Studio.

svcutil myAssembly.dll
   - Generate metadata documents for Service Contracts and associated types in an assembly

svcutil myServiceHost.exe /serviceName:myServiceName
   - Generate metadata documents for a service, and all associated Service Contracts and data types in an assembly

svcutil myServiceHost.exe /dconly
   - Generate metadata documents for data types in an assembly

Я полагаю, что когда-то в прошлом с этим сталкивался, и, возможно, заставил или не смог заставить его работать. Другим простым способом создания схем является поддержка службы WCF, которая использует ваши контракты данных, и доступ к WSDL. WSDL импортирует все xsds для DataContracts.

4 голосов
/ 09 апреля 2010

Svcutil.exe может «экспортировать метаданные для скомпилированных контрактов данных» .
Существует связь между DataContract и XSD :

DataContractSerializer сопоставляет типы CLR с XSD, когда метаданные экспортируются из службы Windows Communication Foundation (WCF) с использованием конечной точки метаданных или служебной программы метаданных ServiceModel (Svcutil.exe). Для получения дополнительной информации см. Сериализатор контракта данных.

DataContractSerializer также сопоставляет XSD с типами CLR, когда Svcutil.exe используется для доступа к документам языка описания веб-служб (WSDL) или XSD и создания контрактов данных для служб или клиентов.

Вы также можете получить XSD во время выполнения, даже в браузере, настроив a MEX endpoint .
WSDL по умолчанию будет содержать ссылки на XSD, к которым также можно получить доступ через конечную точку.

...