У меня есть динамический объект (на самом деле это 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;
mydynamicobject.mylist
терпит неудачу - время компиляции или время выполнения? - person Jon Skeet   schedule 30.11.2012Enumerable.Count
- это ошибка во время выполнения или во время компиляции? Какой является типом времени выполненияmydynamicobject.mylist
? - person Jon Skeet   schedule 30.11.2012mylist
здесь не список - это просто объект с одним свойствомId
. Я удивлен, что это вообще работает, с точки зрения приведения кICollection
... - person Jon Skeet   schedule 30.11.2012mylist
не является списком. Кроме того, вы можете попробовать удалить приведение кICollection
и проверить, работает лиmydynamicobject.mylist.Count == 0
для вас? Актерский состав в данном случае кажется излишним. - person Paolo Moretti   schedule 30.11.2012mydynamicobject.mylist.Count
не работает (возвращает ноль). Вы правы в том, что моя тестовая программа на самом деле не была списком; Я изменил это и сделал настоящий список. Код ICollection работает как прежде. - person Alex   schedule 30.11.2012var objectGraph = new { mylist = new { mylistobject1= new { Id = 1 }, mylistobject2 = new { Id = 2 } }, (...)
- person Alex   schedule 30.11.2012