検索を使用して答えを見つけようとしていましたが、最終的に代わりに新しい質問を作成することにしました。
私は動的型への XML シリアル化に取り組んでいます。すべてを実行しましたが、リフレクションと同様の方法でメンバーにアクセスできるようにしたいと考えています。
から継承された私の型では、この方法を使用して値にアクセスできるようにメソッドとメソッドDynamicObject
を実装しました。TryGetMemeber
TryGetIndex
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
か? どんなコードサンプルでも大歓迎です!