7
votes

Collection WCFDatacontract

J'ai récemment remarqué dans l'un des articles que l'opération de service WCF a renvoyé un collectionDatacontract xxx

et le type d'utilisateurs a été défini comme ci-dessous: xxx < P> retourne un collectionDatacontract (comme les utilisateurs dans ce cas) servira un objectif différent de simplement renvoyer ?


2 commentaires

Merci! J'ai utilisé cela, mais aussi nécessaire pour appeler le constructeur de base pour rendre la génération de page d'aide fonctionne - donc dans votre exemple, remplacez: «Utilisateurs publics () {} 'Utilisateurs publics (): Base () {}'.


@Iangrainger Quelque chose d'autre a dû être absenté - le constructeur de base de no-arg est appelé automatiquement si non spécifié autrement ..


3 Réponses :


1
votes

Si vous renvoyez une liste, le sérialisateur de données a une manière spécifique de générer XML. Je ne sais pas comment il le fait à la liste, mais si c'était un tableau, il aurait généré quelque chose comme - xxx

mais en utilisant CollectionDatacontract, vous pouvez le sérialiser et mieux l'exposer aux consommateurs qui peuvent être créer XML à la main. Exemple - je serais capable de donner - CollectionDatacontract (Nom = "Allusers") // Je ne me souviens pas d'élémentName ou nom

alors que le XML attendu serait similaire à - xxx

c'est un utilitaire pour cela.


0 commentaires

7
votes

Autant que je sache, cet attribut vous donnera un certain contrôle sur quels noms les éléments auront dans la chaîne XML finale, une fois que le DatacontractSerializer a effectué son travail sérialisant votre collection.

Cela peut être utile lorsque vous devez analyser le résultat ultérieur ultérieur (en d'autres termes, vous saurez quel élément rechercher dans ce texte XML, pour trouver votre collection et ses parties).

Regardez cela pour des exemples et plus d'informations:

http://msdn.microsoft.com/en-us/library/ aa347850.aspx


0 commentaires

0
votes

Juste pour explorer la réponse d'Andrei et partager mon expérience, je viens de passer par une question que j'ai enfin résolue à l'aide de CollectionDatacontract. Fondamentalement, afin d'interfacer avec un système spécifique, je voulais pouvoir envoyer et recevoir XML du format: xxx

Cependant, si j'ai utilisé un tableau ou un objet de liste, la racine tag était toujours appelé arrayofmessage. Et si j'ai créé une classe qui détenait un éventail d'objets de message (disons appelé Msglist), alors WCF ajouterait cela comme une étiquette supplémentaire dans le mélange, que je ne pouvais pas trouver un moyen de se débarrasser de. Donc, il aurait ressemblé à: xxx

SO CollectionDatacontract vient de me donner un moyen simple de contrôler le nom de l'élément de liste racine.


0 commentaires