Geo*_*ton 3 c# casting navision dynamics-nav
我们使用的是动态公开Web服务的Microsoft ERP.服务生成的服务不受我们控制.我们没有说明如何创建和公开对象,包括类型定义.当从Web服务添加或删除新方法时,所有类型枚举都将重新编号,并且在更新到新定义之后,使用Web服务的所有内容都会被重新填充.基本上,
enumeration Type1
Item1
Item2
Item3
Run Code Online (Sandbox Code Playgroud)
......可能会变成
enumeration Type6
Item1
Item2
Item3
Run Code Online (Sandbox Code Playgroud)
...枚举类型名称更改,但该类型的成员保持静态.该服务输出的服务看起来与使用XSD.exe生成对象的最终结果完全相同.因此,只要有人在服务上公开新方法(通过ERP GUI),就会重建对象,按字母顺序将类型分配给服务定义,重新暴露,留下整个代码库.
我尝试使用反射来确定类型,然后将静态成员解析为新的业务对象,但它不起作用,因为我不能在不知道类型的实际名称的情况下键入强制转换枚举.以下方法无效.
System.Type t = service.BusinessObjectEnumeration.GetType();
service.SomeField = Enum.Parse(t,"Item1");
Run Code Online (Sandbox Code Playgroud)
...因为编译器抛出错误,因为我没有明确地输出枚举.
有什么想法我可以在将类型动态转换为正确的枚举时如何克服这个问题?
同样,我无法修改服务公开的实际对象,只能修改订阅服务的代码.
谢谢,乔治
重新示例代码:
System.Type t = service.BusinessObjectEnumeration.GetType();
service.SomeField = Enum.Parse(t,"Item1");
Run Code Online (Sandbox Code Playgroud)
也许这样做的方法是通过反思:
var prop = service.GetType().GetProperty("SomeField");
prop.SetValue(service, Enum.Parse(prop.PropertyType, "Item1"), null);
Run Code Online (Sandbox Code Playgroud)