C# dynamic 'object' does not contain a definition for 'xxxx'

背景

  • dynamic使用linq进行查找,运行正常;但是单测时报错 'object' does not contain a definition for 'xxxx' ;报未定义属性错误

原因

  • 查资料发现:dynamic 匿名类的属性访问权限时internal,只有在同一个程序集内(Assembly)内才可以似乎用;
  • 运行正常是因为调用者和被调用者在一个程序集(类库)内;可以正常使用
  • 使用单测时调用者和被调用者不在同一个程序集内;(调用者是单测的类库)

解决方案

  • 在被调用方的地方使用json序列化,再次反序列化成dynamic 类型

案例

var json = JsonConvert.SerializeObject(dynamicData, Formatting.Indented);
var newdynamicData = JsonConvert.DeserializeObject>(json);

//此处使用linq就不报未定义属性(SeriesX)问题了
var xName = newdynamicData .Select(p => p.SeriesX).Distinct().ToList();

你可能感兴趣的:(C# dynamic 'object' does not contain a definition for 'xxxx')