私は以下のような単純なオブジェクトを辞書コンバーターに書き込もうとしています:
public static class SimplePropertyDictionaryExtensionMethods
{
public static IDictionary<string,string> ToSimplePropertyDictionary(this object input)
{
if (input == null)
return new Dictionary<string, string>();
var propertyInfos = from property in input.GetType()
.GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.FlattenHierarchy | BindingFlags.GetProperty)
where property.CanRead
select property;
return propertyInfos.ToDictionary(x => x.Name, x => input.GetPropertyValueAsString(x));
}
public static string GetPropertyValueAsString(this object input, PropertyInfo propertyInfo)
{
var value = propertyInfo.GetGetMethod().Invoke(input, new object[] {});
if (value == null)
return string.Empty ;
return value.ToString();
}
}
しかし、私がこれを次のように呼ぼうとすると:
var test = (new { Foo="12", Bar=15 }).ToSimplePropertyDictionary();
次に、例外を除いて失敗します。
[System.MethodAccessException]: {"Attempt to access the method failed: .<>f__AnonymousType0`1.get_Foo()"}
これは、マンゴーのセキュリティモデルが「いいえ」と言っているだけですか?それを回避する方法はありますか?これはパブリックGetアクセサーのように感じます-それで、私はそれを呼び出すことができるはずだと感じますか?
スチュアート