2012-11-29 11 views
5

Tôi có một đối tượng động (thực ra là json) mà tôi chuyển vào bộ điều khiển MVC WebApi của tôi.Đếm đối tượng trong đối tượng ẩn danh động (C#)

Đối tượng json chứa nhiều danh sách trong một đối tượng ẩn danh được gửi tới bộ điều khiển từ ứng dụng khác qua client.PostAsJsonAsync("myapiurl", objectGraph).

Những gì tôi cần làm để xác thực đối tượng ở phía MVC, là lấy số lượng đối tượng trong mỗi danh sách. Tôi có thể truy cập danh sách động qua mydynamicobject.mylist và các mục riêng lẻ qua mydynamicobject.mylist[index] nhưng tôi dường như không thể nhận được số lượng mydynamicobject.mylist.

Những gì tôi đã cố gắng cho đến nay: phương pháp khuyến nông

  • LINQ - không hoạt động trên động
  • Enumerable.Count(mydynamicobject.mylist) - không thể suy ra loại

Bất cứ ý tưởng khác? Số đếm thực sự có sẵn trong đối tượng động base nhưng rõ ràng là không thể truy cập dưới dạng thuộc tính. Cứu giúp!

này hoạt động bây giờ:

// This is a MVC/WebApi method 
public dynamic Post(dynamic mydynamicobject) 

if (((ICollection)mydynamicobject.mylist).Count == 0) 
{ 
// do something 
} 

Mã sẽ gửi các đối tượng động (ứng dụng khác nhau):

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

Tại thời điểm nào thì 'mydynamicobject.mylist' không thành công - thời gian biên dịch hoặc thời gian thực thi? –

+0

Tôi chỉ không thể nhận được số lượng danh sách trong đối tượng động. Sự thất bại phụ thuộc vào những gì tôi cố gắng. Enumerable.Count sẽ nói rằng nó không thể suy ra kiểu và xác định nó một cách rõ ràng. – Alex

+0

Xin lỗi, tôi có nghĩa là với 'Enumerable.Count' - là lỗi tại thời gian thực hiện, hoặc thời gian biên dịch? * Thời gian thực thi 'mydynamicobject.mylist' là gì? –

Trả lời

11

Nếu họ là mảng, tôi tin rằng bạn đang tìm kiếm bất động sản Length của họ.

mydynamicobject.mylist.Length 

Ngoài ra, tôi nghĩ rằng bạn có thể có thể nhận được ngay với đúc mydynamicobject.mylist một IEnumerable và sau đó đưa cho IEnueramble.Count như vậy:

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

bạn có thể cũng làm như Paolo đề cập:

((ICollection)mydynamicobject.mylist).Count 

Mặc dù tôi không thể nhận tín dụng cho điều đó.

+1

Ý bạn là 'ICollection.Count' –

+0

@PaoloMoretti Cảm ơn. Sửa chữa. – Crisfole

+0

Tôi xin lỗi, tôi không đủ rõ ràng. Bạn có thể thử đưa nó vào 'ICollection' và sau đó kiểm tra [' ICollection.Count'] (http://msdn.microsoft.com/en-us/library/system.collections.icollection.count.aspx), hoặc đưa nó vào 'IEnumerable' và sử dụng phương thức mở rộng LINQ [' Enumerable.Count'] (http://msdn.microsoft.com/en-us/library/bb535181.aspx) –