5

我有一个动态对象(它实际上是 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;
4

1 回答 1

11

如果它们是数组,我相信您正在寻找它们的Length属性。

mydynamicobject.mylist.Length

或者,我认为您可能能够摆脱投射mydynamicobject.mylist到 anIEnumerable然后将其交给IEnueramble.Count这样的人:

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

可以像保罗提到的那样做:

((ICollection)mydynamicobject.mylist).Count

虽然我不能为那一个功劳。

于 2012-11-29T20:42:09.060 回答