Est-il possible de passer des objets génériques (par générique je veux dire tout avec DataContract
, pas de collection générique C#) sans hériter d'une racine? En ce moment j'ai quelque chose comme ceci:Comment passer un objet générique via WCF
[OperationContract]
void Save(GenericObject o);
[DataContract]
[KnownType(typeof(ClassA))]
[KnownType(typeof(ClassB))]
class GenericObject {....
[DataContract]
class ClassA: GenericObject {....
[DataContract]
class ClassB: GenericObject {....
Tout était OK, mais le projet a obtenu plus grand et je ne peux pas vraiment se permettre de tirer tous les contrats d'une classe.
Je ne souhaite pas ajouter de méthodes spécialisées au service. En guise de solution de contournement, je peux sérialiser manuellement les classes en chaîne ou en octet [] via DataContractSerializer et les désérialiser du côté serveur: void Save (byte [] serializedObject) mais c'est un peu un hack.
J'ai remarqué que je peux facilement retourner des objets génériques, par ex. objet Load (chaîne ID) fonctionne très bien, mais void Enregistrer (objet o) ne fonctionne pas. J'utilise Silverlight en tant que client.
Vous avez une réponse ci-dessous. Si vous voulez plus d'informations, il pourrait être utile d'avoir un aperçu de ClassA, ClassB et de ce à quoi ressemble votre GenericObject. Et pourquoi vous voulez passer des objets génériques plutôt que ClassA/B/C etc. – Cheeso
Je veux passer des objets génériques car j'ai une vaste collection d'objets (ClassA/B/C) qui sont stockés dans un système de fichiers virtuel créé au dessus de la base de données. Par conséquent, j'utilise deux méthodes pour les stocker/récupérer: Save()/Load() et non SaveClassA/SaveClassB/SaveClassC avec exactement la même signature (en dehors de type). –