Dois-je exposer un constructeur dans un DataContract WCF pour qu’il puisse fonctionner pendant l’instanciation d’object sur le client?

J’ai une classe dans un service WCF, appelons-le A. A est un contrat de données qui contient, en tant que membre DataMembers, une collection d’un autre object personnalisé B. Pour éviter les problèmes Null Reference côté client, j’instancie la BList dans le constructeur de la manière suivante:

[DataContract] public class A { [DataMember] public Ssortingng name { get; set; } [DataMember] public List BList {get; set; } public A() { BList = new List(); } } 

Mon problème est que sur le client, cette instanciation ne se produit pas et BList apparaît comme nul après la création d’un object de A sur le client. Je devine que le constructeur n’apparaît pas sur le client. Alors, dois-je faire du constructeur un contrat d’opération explicite? Si tel était le cas, les clients pourraient voir des choses internes qu’ils ne devraient pas voir, pas vrai? Comment puis-je m’assurer que cette instanciation se produit sur le client?

Merci, et désolé si cela semble être une question stupide.

Vous devez utiliser les atsortingbuts [OnDeserializing] ou [OnDeserialized] pour effectuer l’initialisation des types DataContract. Voir http://msdn.microsoft.com/en-us/library/ms733734.aspx

Je ne sais pas s’il existe un moyen de le faire, mais en obtenant la nouvelle instance du service, la liste devrait être initialisée, je suggère ce qui suit

  • Ecrivez une méthode Web qui renvoie une nouvelle instance de votre classe. Vous pouvez l’utiliser comme suit et je suis sûr que votre liste est initialisée.

Pour créer l’instance:

 A a = new ServiceClient.CreateAInstance(); 

Dans le service, écrivez la méthode,

 [OperationContract] public A CreateAInstance() { return new A(); }