解析动态枚举

问题描述 投票:3回答:3

我们正在使用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服务。由服务生成的服务不受我们的控制。关于对象,包括类型定义,...

c# casting navision dynamics-nav
3个回答
8
投票

重新输入示例代码:


1
投票

我在Nav网络服务中也遇到了类似的问题。我用来为通过Nav公开的每个服务创建一个新的Web参考的解决方案,而不是为所有服务创建一个单独的参考。这可以防止您在不使用反射或黑客的情况下发生名称冲突。


0
投票

您为什么需要解析事物?如果我正确理解了枚举,它们会传递值(而不是枚举本身)。

© www.soinside.com 2019 - 2024. All rights reserved.