5

MVC WebApi コントローラーに渡す動的オブジェクト (実際には json) があります。

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;
4

1 に答える 1

11

Lengthそれらが配列の場合、そのプロパティを探していると思います。

mydynamicobject.mylist.Length

mydynamicobject.mylistまたは、にキャストして、次のようIEnumerableに渡すこともできると思います。IEnueramble.Count

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

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

((ICollection)mydynamicobject.mylist).Count

私はそれを信用することはできませんが。

于 2012-11-29T20:42:09.060 に答える