2009-11-25 6 views
2

Je génère des classes C# à partir d'un fichier XSD OTA (Open Travel Alliance). Vous pouvez download the XSD file from here.Pourquoi certaines propriétés de classe C# générées ne correspondent-elles pas aux attributs XSD?

Je crée la classe C# avec la commande suivante dans une invite de commande Visual Studio:

xsd FS_OTA_VehLocDetailsNotifRQ.xsd /classes /nologo 

Dans OTA_VehLocDetailsNotifRQ.POS[0].RequestorID j'attendre à trouver une propriété ID. Pourtant, la propriété générée par l'outil XSD.exe est nommée ID_Context.

Pouvez-vous expliquer pourquoi cela fait, et si je suis capable de le forcer à générer le nom de propriété correct (ID)?

S'il vous plaît ne pas suggérer que je modifie le fichier généré car ce n'est pas une approche maintenable.

plus modifier après avoir accepté la réponse:

En regardant le XSD de plus près et en remplaçant les références avec leurs définitions de groupes d'attributs, l'attribut ID peut être vu dans son groupe d'attributs:

<xs:attributeGroup name="UniqueID_Group"> 
    <xs:attribute name="URL" type="xs:anyURI" /> 
    <xs:attribute name="Type" type="OTA_CodeType" use="required" /> 
    <xs:attribute name="Instance" type="StringLength1to32" /> 
    <xs:attributeGroup name="ID_Group"> 
    <xs:attribute name="ID" type="StringLength1to32" use="required" /> 
    </xs:attributeGroup> 
    <xs:attribute name="ID_Context" type="StringLength1to32" use="optional" /> 
</xs:attributeGroup> 

Je crois qu'il s'agit d'un bug dans l'outil XSD.

Répondre

2

Voyons voir ....

  • le RequestorID contient le contenu complexe de type UniqueID_Type
  • UniqueID_Type contient une référence à un groupe d'attributs appelé UniqueID_Group
  • UniqueID_Group est un groupe d'attributs et contient les éléments suivants attributs:
    • URL
    • Type
    • Instance
    • une référence à un ID_Group
    • ID_Context

Je suppose que le code C# "ID_Context" est généré en raison de l'attribut "ID_COntext" dans ce groupe d'attributs. .. Je ne vois rien de mal à cela.

Mais je suis d'accord - que ID_Group devrait inclure une propriété « ID », mais il semble xsd.exe a abandonné cette référence imbriquée à la ID_Group - pour une raison quelconque ... il ne semble pas être un problème d'autres ont trébuché dans d'autres scénarios, aussi bien. On dirait xsd.exe ne peut pas gérer cette tâche :-(

Peut-être vérifier aussi cette discussion:

http://groups.google.com/group/OTA-Impl-Forum/browse_thread/thread/fa476cfb6e1fa7f7

Mise à jour: J'ai aussi essayé le svcutil.exe de WCF (.NET 3.0 et plus) - pas de chance soit :-(

Error: Type 'DateOrTimeOrDateTimeType' in namespace ' http://www.opentravel.org/OTA/2003/05 ' cannot be imported. Simple types with ** <union> content are not supported. Either change the schema so that the types can map to data contract types or use ImportXmlTyp e or use a different serializer.

+0

Wow, j'ai manqué cette étape, bravo, comme vous le dites, le saut de 'ID_Group' est le problème, quel dommage c'est l'attribut –

1

Un peu en retard, mais je pense que j'ai trouvé peut-être la solution à votre problème (et maintenant mon problème aussi):

http://www.opentravelcommunityforum.com/forum/viewtopic.php?f=8&t=19

Je n'ai pas encore essayé, mais je suis sur le point de le faire

+0

Je ne pense pas que cela résout ce problème particulier, mais si c'est le cas s'il vous plaît partager le correctif ici. S! –

+0

Oui, ça a marché pour moi. J'ai eu le même problème et en imbriquant je pourrais le réparer! – Luiggi

Questions connexes