0

検索を使用して答えを見つけようとしていましたが、最終的に代わりに新しい質問を作成することにしました。

私は動的型への XML シリアル化に取り組んでいます。すべてを実行しましたが、リフレクションと同様の方法でメンバーにアクセスできるようにしたいと考えています。

から継承された私の型では、この方法を使用して値にアクセスできるようにメソッドとメソッドDynamicObjectを実装しました。TryGetMemeberTryGetIndex

XmlTextReader xmlReader = new XmlTextReader(memStr);
DynamicXMLObjectConverter converter = new DynamicXMLObjectConverter();
dynamic obj = converter.Deserialize(xmlReader, typeof(DynamicXMLObject));

string str = obj.dynamic_property;
string item = obj[0];

それは魅力のように機能しますが、ランタイム コンパイラ サービスを介して同じメンバーにアクセスしたいと考えています。

メンバーを取得するには、次のコードを使用します。

CallSiteBinder binder = Binder.GetMember(CSharpBinderFlags.None, "dynamic_property", typeof(MyDynamic), new[] { CSharpArgumentInfo.Create(CSharpArgumentInfoFlags.None, null) });
CallSite<Func<CallSite, object, object>> callsite = CallSite<Func<CallSite, object, object>>.Create(binder);
var obj = callsite.Target(callsite, source);

それは機能し、動的型の任意のメンバーにアクセスできます。私にとって次のことは、同じ方法を使用してインデクサーにアクセスすることです。Binderメソッドがサポートしていることは知っているGetIndexので、技術的には同じように機能するはずGetMemberですが、そうではありません。

誰かが私を助けて、を使用してインデクサーにアクセスする方法を説明できますcallsiteか? どんなコードサンプルでも大歓迎です!

4

1 に答える 1