2010-04-08 18 views
8

J'utilise DataContractSerializer pour sérialiser/désérialiser mes classes vers/depuis XML. Tout fonctionne bien, mais à un moment donné je voudrais établir un schéma standard pour le format de ces fichiers XML indépendant du code réel. De cette façon, si quelque chose interrompt le processus de sérialisation, je peux toujours revenir en arrière et vérifier ce que devrait être le schéma standard. Ou si j'ai besoin de modifier le schéma, la modification est une décision explicite plutôt qu'un effet ultérieur de la modification de mon code. En outre, il se peut que d'autres personnes écrivent d'autres logiciels qui ne sont pas nécessairement basés sur .NET et qui doivent être lus à partir de ces fichiers .xml. J'aimerais pouvoir leur fournir une sorte de documentation du schéma.Existe-t-il un moyen d'exporter un schéma XSD à partir d'un DataContract?

Existe-t-il une relation entre un contrat DataContract et un schéma XSD? Existe-t-il un moyen d'exporter les attributs DataContract dans les classes en tant que schéma XSD?

Répondre

4

Svcutil.exe can "export metadata for compiled data contracts".
Il y a relation entre DataContract and XSD:

Les types DataContractSerializer Cartes CLR pour XSD lorsque les métadonnées sont exportées à partir d'un service Windows Communication Foundation (WCF) en utilisant un point de terminaison de métadonnées ou l'outil utilitaire métadonnées ServiceModel (Svcutil.exe). Pour plus d'informations, consultez Sérialiseur de contrat de données. Le DataContractSerializer mappe également les types XSD aux CLR lorsque Svcutil.exe est utilisé pour accéder aux documents WSDL (Web Services Description Language) ou XSD et générer des contrats de données pour les services ou les clients.

Vous pouvez obtenir le XSD (s) lors de l'exécution ainsi, même dans votre navigateur, par un setting upMEX endpoint.
Le WSDL contient par défaut des références aux XSD accessibles par le point de terminaison.

3

Vous pouvez générer des fichiers de schéma à partir de DataContracts à l'aide de l'outil svcutil.exe fourni avec 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 

Je crois que je foiré avec ce à un moment donné dans le passé, et peut ou non avoir obtenu au travail. Un autre moyen simple de générer des schémas est de mettre en place un service WCF qui utilise vos contrats de données et d'accéder au WSDL. Le WSDL importera tous les xsds pour les DataContracts.