4

動的変数を使用して、匿名型を返すメソッドの結果をテストするという狡猾なアイデアがありました。具体的には、jsonが次のように見えるJsonResultを返します。

{ "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の配列として使用できるようにするにはどうすればよいかわかりません。

double []としてキャストしてみましたが、うまくいきません。

余談ですが、プロパティがダイナミックに定義されているかどうかを簡単に確認できますか?

4

3 に答える 3

3

The reason .ToArray() doesn't work is that it's an extension method, and extension methods aren't available at runtime. That just means you have to call the function statically. Does Enumerable.ToArray<double>(data.newData) work?

You may need Enumerable.ToArray(Enumerable.Cast<double>(data.newData)) depending on what elements newData actually has.

于 2010-11-12T13:23:38.233 に答える
2

動的タイプのインスタンスのプロパティを取得するには

PropertyDescriptorCollection props = TypeDescriptor.GetProperties(dyn);
foreach (PropertyDescriptor prop in props)
{
  object val = prop.GetValue(dyn);
  var propName = prop.Name;
  var propValue = val;
}

ここで、dynは動的オブジェクトのインスタンスです。

于 2010-11-12T13:17:53.580 に答える
1

Could you use the JavaScriptSerializer class to parse the Json string into a dynamic variable? Eg:

var serializer = new JavaScriptSerializer();
var jsonObj = serializer.Deserialize<dynamic>(jsonString);
var newData1 = jsonObj["newData"][0];
于 2010-11-12T13:25:06.777 に答える