La WCF: générique de liste à un tableau sérialisé
Donc je suis en train de travailler avec WCF et mes services types de retour qui contiennent générique listes. WCF est présentement à la conversion de ces tableaux sur le fil. Est-il un moyen de configurer la WCF pour les convertir en retour à la liste par la suite? Je sais qu'il existe un chemin en cliquant sur avancé lorsque vous ajoutez une référence de service, mais je suis à la recherche d'une solution dans des fichiers de configuration ou quelque chose de similaire.
[DataContract(IsReference = true)]
public class SampleObject
{
[DataMember]
public long ID { get; private set; }
[DataMember]
public ICollection<AnotherObject> Objects { get; set; }
}
C'est très étrange, aussi, parce que d'un service renvoie sous la forme d'une liste et l'autre comme un tableau et je suis assez sûr qu'ils sont configurés de façon identique.
OriginalL'auteur OpticalDelusion | 2011-06-30
Vous devez vous connecter pour publier un commentaire.
À l'onglet avancé lors de l'ajout d'une référence de service, vous pouvez définir cette option. standard des Tableaux sont en jeu.
OriginalL'auteur msjonathan
Je pense que c'est la dent avec uniquement de la façon dont le client outil génère les contrats à partir du WSDL. Dans mon cas, j'ai fait une réutilisables .dll qui contient mon [OperationContract] et [DataContract] les classes, et d'utiliser à la fois le client et le serveur, au lieu de générer un avec SvcUtil. De cette façon, je préserve mes listes de médicaments génériques.
OriginalL'auteur CodingWithSpike
En outre, prendre soin de ne pas à avoir à la fois des tableaux et des génériques dans les classes à partir de laquelle vous sérialiser les instances avec WCF, parce que vous aurez un problème lors de la désérialisation : tout sera converti à ArrayOf (si vous ne modifiez pas la configuration) ou de Type de Collection.
Comme résultat, vous obtenez des erreurs lors de la désérialisation de la WCF code essayez d'affecter un tableau où vous attendez une Collection et inversement.
C'était juste mon 2cent des conseils de ce que j'ai appris au cours d'un petit projet avec WCF. 🙂
OriginalL'auteur daminetreg
J'ai trouvé une solution beaucoup plus simple et suffisamment bien fonctionné pour moi, bien qu'il pourrait ne pas fonctionner pour les autres. J'ai simplement changé à partir de l'aide de ICollection (IList également produit ce résultat) à la Liste. Il a bien fonctionné par la suite.
Solution de Ici.
J'ai aussi trouvé une possible solution de configuration de Ici près du fond.
OriginalL'auteur OpticalDelusion
Au lieu d'utiliser
ICollection<AnotherObject>
dans votre contrat de données, qui sera généré dans l'application client comme unAnotherObject[]
.Essayez ceci:
définir un nouveau contrat de données
dans votre code:
dans Visual Studio (même à svcUtil), le proxy client code apparaîtra comme ceci:
Cela fonctionne aussi pour les construit dans .Types de réseau.
antonio
OriginalL'auteur antonio