计算动态匿名对象(C#)中的对象

Ale*_*lex 5 c# linq asp.net-mvc anonymous-types dynamicobject

我有一个动态对象(实际上是json),我将其传递给我的MVC WebApi控制器.

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
}
Run Code Online (Sandbox Code Playgroud)

发送动态对象的代码(不同的应用程序):

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;
Run Code Online (Sandbox Code Playgroud)

Cri*_*ole 11

如果他们是阵列,我相信你正在寻找他们的Length财产.

mydynamicobject.mylist.Length
Run Code Online (Sandbox Code Playgroud)

另外,我想你也许能逃脱铸造mydynamicobject.mylist一个IEnumerable,然后把它交给IEnueramble.Count像这样:

IEnumerable.Count((IEnumerable)mydynamicobject.mylist);
Run Code Online (Sandbox Code Playgroud)

可以像保罗所说的那样做:

((ICollection)mydynamicobject.mylist).Count
Run Code Online (Sandbox Code Playgroud)

虽然我不能相信那一个.