Ошибка отражения для свойств анонимных типов в Silverlight - PullRequest
1 голос
/ 03 сентября 2010

Я использую Silverlight 4 с VS 2010 и пытаюсь отразить анонимный тип, и у меня получилось «Попытка метода« ... »для доступа к методу» ... «не удалась». Я пробовал различные обходные пути для этого, но я не мог найти и простых.

class.CallAnonymous("SimpleClass", "HelloFunc", new { strIn = "Boo" });</p> <pre><code> public void CallAnonymous(string cName, string cAction, object anonymousParms) { Type anonymousType = anonymousParms.GetType(); PropertyInfo[] props = anonymousType.GetProperties(); ServiceParam serviceParam = new ServiceParam(); foreach (var info in props) { string propertyName = info.Name; object propertyObj = info.GetValue(anonymousParms, null); // Throw the exception on PropertyInfo.GetValue() serviceParam.Add(propertyName, propertyObj); } }

Ответы [ 2 ]

8 голосов
/ 03 сентября 2010

[Редактировать] Вы можете привязать анонимный тип, применив атрибут [Assembly: InternalsVisibleTo ("System.Windows")] в ваших проектах.Это позволит системе привязки данных Silverlight видеть эти сгенерированные компилятором внутренние типы.

К сожалению, вы не можете получить доступ к свойствам анонимного объекта, поскольку компилятор помечает их как внутренние, а песочница безопасности Silverlight препятствует доступу к внутреннимmembers.

В настоящее время вы можете вызвать метод анонимного объекта ToString() и извлечь значения из строкового представления.

Надеюсь, это поможет.

1 голос
/ 03 сентября 2010

Я нашел очень хорошую статью, которая решила мою проблему.«В этой статье объясняется, почему динамические функции C # 4.0, похоже, не работают при оценке экземпляров анонимных типов, возвращаемых из открытого метода другой сборки».и спасибо ligaz за хорошую отправную точку.

Внутренние анонимные типы, C # 4.0 и Silverlight

...