Nous utilisons un ERP Microsoft qui expose dynamiquement les services Web. Les services générés par le service sont hors de notre contrôle. Nous n'avons aucun mot à dire dans la façon dont les objets, y compris les définitions de type, sont créés et exposés. Lorsqu'une nouvelle méthode est ajoutée ou supprimée du service Web, toutes les énumérations de type sont renumérotées et tout ce qui utilise le service Web, après la mise à jour vers les nouvelles définitions, est compressé. Donc, essentiellement,Analyse d'une énumération dynamique
enumeration Type1
Item1
Item2
Item3
... pourrait devenir
enumeration Type6
Item1
Item2
Item3
... avec le nom du type d'énumération changeant, mais les membres du type restant statique. Le service génère un service qui ressemble exactement au résultat final de l'utilisation de XSD.exe pour générer des objets. Ainsi, à chaque fois que quelqu'un expose une nouvelle méthode sur le service (via l'interface graphique ERP), les objets sont reconstruits, les types sont assignés aux définitions de service dans l'ordre alphabétique, réexposés, laissant toute la base de code. J'ai essayé d'utiliser la réflexion pour déterminer le type, puis analyser le membre statique dans le nouvel objet métier, mais cela ne fonctionne pas car je ne peux pas taper l'énumération sans connaître le nom réel du type. Ce qui suit ne fonctionnera pas.
System.Type t = service.BusinessObjectEnumeration.GetType();
service.SomeField = Enum.Parse(t,"Item1");
... comme le compilateur renvoie une erreur car je ne lance pas explicitement l'énumération.
Des idées comment je peux surmonter ce problème tout en coulant dynamiquement le type à l'énumération correcte?
Encore une fois, je ne peux pas modifier les objets réels exposés par le service, seulement le code s'abonnant au service.
Merci, George
Je suppose qu'utiliser la réflexion à la fois pour récupérer la valeur et définir la propriété est la seule façon disponible, étant donné les contraintes OP. Bien sûr, cela signifie que même les méthodes qui utilisent une telle énumération en tant que paramètre doivent être appelées en utilisant la réflexion (puisqu'il s'agit de types de paramètres de régression agnostiques) ... – BladeWise