gpt4 book ai didi

c# - 解析动态枚举

转载 作者:行者123 更新时间:2023-11-30 13:52:11 25 4
gpt4 key购买 nike

我们正在使用动态公开 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");

...因为编译器抛出错误,因为我没有显式转换枚举。

有什么想法可以在将类型动态转换为正确的枚举时克服这个问题吗?

同样,我无法修改服务公开的实际对象,只能修改订阅服务的代码。

最佳答案

示例代码:

System.Type t = service.BusinessObjectEnumeration.GetType();
service.SomeField = Enum.Parse(t,"Item1");

也许这样做的方法是通过反射:

var prop = service.GetType().GetProperty("SomeField");
prop.SetValue(service, Enum.Parse(prop.PropertyType, "Item1"), null);

关于c# - 解析动态枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3085243/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com