2012-11-29 14 views
5

MVC WebApiコントローラに渡す動的オブジェクト(実際はjson)があります。動的匿名オブジェクト内のオブジェクトをカウントする(C#)

jsonオブジェクトには、client.PostAsJsonAsync("myapiurl", objectGraph)で別のアプリケーションからコントローラに送信された、匿名オブジェクト内の複数のリストが含まれています。

MVC側でオブジェクトを検証するには、各リスト内のオブジェクトの数を取得する必要があります。 mydynamicobject.mylistと個々のアイテムをmydynamicobject.mylist[index]で動的にアクセスできますが、私はmydynamicobject.mylistのカウントを取得できないようです。

私がこれまで試したどのような:

  • LINQの拡張メソッドは -
  • Enumerable.Count(mydynamicobject.mylist)ダイナミック
  • 上では動作しません - タイプ

他のアイデアを推測することはできませんか?カウントは実際には動的オブジェクトのbaseでは正しく使用できますが、明らかにプロパティとしてアクセスできません。助けて!

これが機能するようになりました:

// This is a MVC/WebApi method 
public dynamic Post(dynamic mydynamicobject) 

if (((ICollection)mydynamicobject.mylist).Count == 0) 
{ 
// do something 
} 

動的オブジェクト(別のアプリ)を送信するコード:

HttpClient client = new HttpClient(); 
client.DefaultRequestHeaders.Accept.Add 
    (new MediaTypeWithQualityHeaderValue("application/json")); 

var objectGraph = new { mylist = new { Id = 1 }, mylist2 = new { Name = "ABC" } }; 
var r = client.PostAsJsonAsync("api/mycontroller", objectGraph).Result; 
+1

「mydynamicobject.mylist」は何時にコンパイル時または実行時に失敗しますか? –

+0

私は動的オブジェクト内のリストのカウントには到達できません。失敗は私が何を試みるかによって決まります。 Enumerable.Countは、型を推論したり明示的に指定することはできないと言います。 – Alex

+0

申し訳ありませんが、私は 'Enumerable.Count'で意味しました - 実行時のエラーか、コンパイル時ですか? 'mydynamicobject.mylist'の実行時の型は何ですか? –

答えて

11

彼らが配列の場合、私はあなたが彼らのLengthプロパティを探していると信じています。

mydynamicobject.mylist.Length 

代わりに、私はあなたがIEnumerablemydynamicobject.mylistをキャストすると離れて取得し、そのようIEnueramble.Countに渡すことができるかもしれないと思う:

IEnumerable.Count((IEnumerable)mydynamicobject.mylist); 

パオロが述べたように、あなたがを行うことができます:

((ICollection)mydynamicobject.mylist).Count 

私はその1つのクレジットを得ることはできませんが。

+1

あなたは 'ICollection.Count'を意味します –

+0

@PaoloMorettiありがとう。修正する。 – Crisfole

+0

申し訳ありませんが、私は十分に明確ではありませんでした。あなたは 'ICollection'にキャストしようとするか、[' ICollection.Count'](http://msdn.microsoft.com/en-us/library/system.collections.icollection.count.aspx)をチェックするか、またはそれを 'IEnumerable'にキャストし、LINQ拡張メソッド[Enumerable.Count']を使用してください(http://msdn.microsoft.com/en-us/library/bb535181.aspx) –

関連する問題