我们正在使用Microsoft ERP,该ERP动态地公开Web服务。由服务生成的服务不受我们的控制。关于如何创建和公开对象(包括类型定义),我们没有任何意见。当从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");
...,因为我没有显式转换枚举,所以编译器抛出错误。
任何想法如何在将类型动态转换为正确的枚举时如何克服此问题?
同样,我无法修改服务公开的实际对象,只能修改订阅该服务的代码。
我们正在使用Microsoft ERP,该ERP动态地公开Web服务。由服务生成的服务不受我们的控制。关于对象,包括类型定义,...
重新输入示例代码:
我在Nav网络服务中也遇到了类似的问题。我用来为通过Nav公开的每个服务创建一个新的Web参考的解决方案,而不是为所有服务创建一个单独的参考。这可以防止您在不使用反射或黑客的情况下发生名称冲突。
您为什么需要解析事物?如果我正确理解了枚举,它们会传递值(而不是枚举本身)。