我有一个动态对象(它实际上是json),我将其传递给我的MVC WebApi控制器。
json对象包含匿名对象中的多个列表,这些列表通过client.PostAsJsonAsync("myapiurl", objectGraph)
从另一个应用程序提交给控制器。
我需要做的就是在MVC端验证对象,就是获取每个列表中对象的数量。我可以通过mydynamicobject.mylist
动态访问列表,也可以通过mydynamicobject.mylist[index]
动态访问各个项目,但我似乎无法获得mydynamicobject.mylist
的计数。
到目前为止我已尝试过:
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;
答案 0 :(得分:11)
如果它们是阵列,我相信你正在寻找他们的Length
财产。
mydynamicobject.mylist.Length
或者,我认为您可以将mydynamicobject.mylist
投射到IEnumerable
,然后将其移至IEnueramble.Count
,如下所示:
IEnumerable.Count((IEnumerable)mydynamicobject.mylist);
你可以也按照Paolo所说的那样做:
((ICollection)mydynamicobject.mylist).Count
虽然我不能相信那个。