J'ai récemment remarqué dans l'un des articles que l'opération de service WCF a renvoyé un collectionDatacontract et le type d'utilisateurs a été défini comme ci-dessous: p>
3 Réponses :
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 - 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 P> alors que le XML attendu serait similaire à - p> c'est un utilitaire pour cela. p> p>
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. P>
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). P>
Regardez cela pour des exemples et plus d'informations: P>
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: 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é à: p> SO CollectionDatacontract vient de me donner un moyen simple de contrôler le nom de l'élément de liste racine. P> P>
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 ..