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");
...列挙型を明示的にキャストしていないため、コンパイラがエラーをスローします。
型を正しい列挙に動的にキャストしながら、この問題を克服する方法はありますか?
繰り返しますが、サービスによって公開されている実際のオブジェクトを変更することはできません。サービスにサブスクライブするコードのみを変更します。