我们正在使用可以动态公开Web服务的Microsoft ERP。服务产生的服务超出了我们的控制范围。我们没有说明如何创建和暴露对象,包括类型定义。当向Web服务添加或删除新方法时,所有类型的枚举都会重新编号,并且在更新到新定义之后,所有使用Web服务的方法都会被清除。所以基本上,解析动态枚举
enumeration Type1
Item1
Item2
Item3
...可能成为
enumeration Type6
Item1
Item2
Item3
...用枚举类型名称改变,但类型的成员保持静止。该服务输出的服务看起来与使用XSD.exe生成对象的最终结果完全相同。因此,无论何时有人在服务上公开新方法(通过ERP GUI),对象都会重建,按字母顺序将类型分配给服务定义,重新展示,从而留下整个代码库。
我试图使用反射来确定类型,然后将静态成员解析到新的业务对象中,但它不起作用,因为我无法在不知道类型的实际名称的情况下键入枚举类型。以下将无法使用。
System.Type t = service.BusinessObjectEnumeration.GetType();
service.SomeField = Enum.Parse(t,"Item1");
...因为编译器抛出一个错误,因为我没有明确地转换枚举。
任何想法如何在动态地将类型转换为正确的枚举时解决此问题?
同样,我不能修改服务公开的实际对象,只能修改订阅服务的代码。
感谢, 乔治
我想,使用反射来检索值和设置属性是唯一可用的方式,给定OP约束。 当然这意味着即使使用这样的枚举作为参数的方法也应该使用反射来调用(因为它是不可知的调用参数类型)... – BladeWise 2010-07-05 07:16:36