如何使用“动态&rdquo读取匿名类型的属性变量

我有一个狡猾的想法,即使用动态变量来测试返回匿名类型的方法的结果 - 更具体地说,它返回一个JsonResult,就像json看起来像这样
{ "newData" : [ 1120741.2697475906,
      826527.64681837813
    ],
  "oldData" : [ 1849870.2326665826,
      1763440.5884212805
    ],
  "timeSteps" : [ 0,
      4.8828124999999998e-10
    ],
  "total" : 2
}
我可以阅读JSonResult,它将给我匿名类型。这是我的代码:
var jsonResult = controller.GetChangeData(1) as JsonResult;
dynamic data = jsonResult.Data;
Assert.AreEqual(2, data.total); // This works fine :)
但是我如何获得“newData”呢?这个代码......
var newData = data.newData;
给了我一个System.Linq.Enumerable.WhereSelectArrayIterator,但我不知道如何处理它才能将它用作双打结果。 我尝试将它作为double []进行投射,但它也不起作用。 顺便说一句,我可以轻松检查动态上是否定义了属性?     
已邀请:
.ToArray()
不起作用的原因是它是一个扩展方法,并且扩展方法在运行时不可用。这只是意味着你必须静态调用该函数。
Enumerable.ToArray<double>(data.newData)
有用吗? 你可能需要
Enumerable.ToArray(Enumerable.Cast<double>(data.newData))
取决于
newData
实际上有哪些元素。     
获取动态类型实例的属性
PropertyDescriptorCollection props = TypeDescriptor.GetProperties(dyn);
foreach (PropertyDescriptor prop in props)
{
  object val = prop.GetValue(dyn);
  var propName = prop.Name;
  var propValue = val;
}
其中dyn是动态对象的实例。     
您可以使用JavaScriptSerializer类将Json字符串解析为动态变量吗?例如:
var serializer = new JavaScriptSerializer();
var jsonObj = serializer.Deserialize<dynamic>(jsonString);
var newData1 = jsonObj["newData"][0];
    

要回复问题请先登录注册