2010-05-31 14 views
4

J'essaie de générer des classes de code C# avec SvcUtil.exe au lieu de Xsd.exe. Ce dernier me donne quelques problèmes..Net SvcUtil: les attributs doivent être facultatifs

Ligne de commande:

SvcUtil.exe myschema.xsd /dconly /ser:XmlSerializer 

Plusieurs problèmes svcutil sont décrits et résolus ici: http://blog.shutupandcode.net/?p=761

Un problème que je ne peux pas résoudre est celui-ci: Erreur: Type 'DatafieldDescription' espace de nom ' 'ne peut pas être importé. Les attributs doivent être facultatifs et partir de l'espace de noms 'http://schemas.microsoft.com/2003/10/Seri alization /'. Modifiez le schéma afin que les types puissent correspondre aux types de contrat de données ou utiliser ImportXmlType ou utiliser un sérialiseur différent. '

j'ai changé

<xs:attribute name="Order" use="required"> 

à

<xs:attribute name="Order" use="optional"> 

et

<xs:attribute name="Order"> 

Mais l'erreur reste. Est-il possible d'utiliser des attributs, ou dois-je les supprimer tous (dans ce cas, cette opération est terminée)?

Répondre

5

La réponse, et une solution possible, se trouve ici: MSDN: Importing Schema to Generate Classes

spécifique: Le XsdDataContractImporter prend en charge un sous-ensemble limité du schéma. Si les constructions de schéma non prises en charge sont présentes (par exemple, les attributs XML), la tentative d'importation échoue avec une exception. Cependant, définissant la propriété ImportXmlType sur true étend la plage de schéma prise en charge. Lorsqu'il est défini sur true, XsdDataContractImporter génère des types qui implémentent l'interface IXmlSerializable. Cela permet un accès direct à la représentation XML de ces types.

Comme dans:

SvcUtil.exe myschema.xsd /dconly /ser:XmlSerializer /importXmlTypes 

Assez tristement, cela se traduira par ce genre de code:

private System.Xml.XmlNode[] nodesField; 

Cordialement, Michel

+2

obtenir de bons résultats de version xsd2code 3.3 @ CodePlex . –

+0

+1: m'a aidé à comprendre le problème que j'avais avec 'XMLSchemaSet.Compile()' ... – IAbstract