C # WCF contrat de données classe partielle - nouveau champ en 2e classe partielle ne pas être ramassé

StackOverflow https://stackoverflow.com/questions/4386677

Question

J'ai un service WCF dans lequel j'ai quelques contrats de données. J'utilise usine de logiciels de services Web, qui utilise un concepteur pour créer tous les messages et de données et d'autres contrats, et il les crée en classes partielles. Lorsque le code est régénéré les classes sont recréés.

using WcfSerialization = global::System.Runtime.Serialization;

[WcfSerialization::CollectionDataContract(Namespace = "urn:CAEService.DataContracts", ItemName = "SecurityItemCollection")]
public partial class SecurityItemCollection : System.Collections.Generic.List<SecurityItem>
{
}

Le contrat de données est une liste générique d'une classe personnalisée qui fonctionnait très bien. Cependant, je veux maintenant ajouter une propriété à cette classe, donc j'ajouté cette classe partielle dans le même espace:

public partial class SecurityItemCollection
{
    public int TotalRecords { get; set; }
}

Cela semble fonctionner très bien sur le côté service, mais quand je compile, puis mettre à jour la référence de service du client, la classe n'a pas la nouvelle propriété à savoir quand il sérialise et reconstitue sur le côté client, il est manquant la nouvelle propriété. Quelqu'un sait pourquoi il en est?

TIA

EDIT: Ok cela est officiellement me rend dingue. La seule chose que je peux voir est qu'il utilise l'attribut CollectionDataContract au lieu de DataContract. Est-ce en quelque sorte pas permettre aux membres de données dans la classe à sérialisés? Pourquoi serait-ce? Il fonctionne très bien sur le côté service - je peux voir et remplir les valeurs sans problème. Cependant, lorsque je mets à jour le refernce de service sur mon client il n'y a rien, juste la classe colelction sans membre de données.

Était-ce utile?

La solution 2

Ok après beaucoup de recherches j'ai finalement trouvé que ce n'est pas autorisé à savoir les classes marquées comme CollectionDataContract ne peuvent pas avoir des membres de données. Pourquoi est-ce que je ne sais pas, mais ça m'a coûté plusieurs heures et un casse-tête. Voir le lien ci-dessous:

WCF et CollectionDataContract DataMember

Autres conseils

Essayez d'ajouter l'attribut DataMember à la propriété TotalRecords

Je sais que c'est vieux, mais il a continué à venir quand je cherchai à ce sujet. J'ai pu obtenir ce travail en ajoutant un attribut « DataMemberAttribute » à la propriété. Ci-dessous un exemple de code.

public partial class SecurityItemCollection
{
    [global::System.Runtime.Serialization.DataMemberAttribute()]
    public int TotalRecords { get; set; }

}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top