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

时间:2012-11-29 20:39:35

标签: c# asp.net-mvc linq 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
}

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

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 个答案:

答案 0 :(得分:11)

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

mydynamicobject.mylist.Length

或者,我认为您可以将mydynamicobject.mylist投射到IEnumerable,然后将其移至IEnueramble.Count,如下所示:

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

你可以按照Paolo所说的那样做:

((ICollection)mydynamicobject.mylist).Count

虽然我不能相信那个。