2012-11-29 14 views
5

के भीतर ऑब्जेक्ट्स की गणना करें मेरे पास एक गतिशील वस्तु है (यह वास्तव में जेसन है) कि मैं अपने एमवीसी वेबएपी नियंत्रक में जाता हूं।डायनामिक अनाम ऑब्जेक्ट (सी #)

जेसन ऑब्जेक्ट में एक अज्ञात ऑब्जेक्ट के भीतर कई सूचियां हैं जो नियंत्रक को client.PostAsJsonAsync("myapiurl", objectGraph) के माध्यम से किसी अन्य एप्लिकेशन से सबमिट की जाती हैं।

एमवीसी पक्ष पर ऑब्जेक्ट को सत्यापित करने के लिए मुझे क्या करना है, प्रत्येक सूची में ऑब्जेक्ट्स की गिनती प्राप्त करना है। मैं 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

'mydynamicobject.mylist' किस बिंदु पर विफल रहता है - संकलन-समय या निष्पादन समय? –

+0

मैं केवल गतिशील वस्तु के भीतर सूची की गणना नहीं कर सकता। विफलता मैं जो कोशिश करता हूं उस पर निर्भर करती है। संख्यात्मक। गणना कहती है कि यह प्रकार का अनुमान नहीं लगा सकता है और इसे स्पष्ट रूप से निर्दिष्ट नहीं कर सकता है। – Alex

+0

क्षमा करें, मेरा मतलब 'एन्यूमेरेबल.काउंट' है - निष्पादन समय में त्रुटि है, या संकलन समय है? 'Mydynamicobject.mylist' का निष्पादन-समय प्रकार * क्या है? –

उत्तर

11

वे सरणियों कर रहे हैं, मेरा मानना ​​है कि आप अपने Length संपत्ति के लिए देख रहे हैं।

mydynamicobject.mylist.Length 

वैकल्पिक रूप से, मुझे लगता है कि तुम इतनी तरह IEnueramble.Count के लिए एक IEnumerable को mydynamicobject.mylist कास्टिंग के साथ दूर होने और फिर इसे सौंपने के लिए सक्षम हो सकता है:

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

आप भी कर सकता है के रूप में पाओलो उल्लेख किया:

((ICollection)mydynamicobject.mylist).Count 

हालांकि मुझे लगता है कि एक के लिए ऋण नहीं ले सकते।

+1

आपका मतलब है 'ICollection.Count' –

+0

@PaoloMoretti धन्यवाद। ठीक करना। – Crisfole

+0

मुझे खेद है, मैं पर्याप्त स्पष्ट नहीं था। आप या तो इसे 'आईसीओलेक्शन' पर डालने का प्रयास कर सकते हैं और फिर ['ICollection.Count'] (http://msdn.microsoft.com/en-us/library/system.collections.icollection.count.aspx) की जांच कर सकते हैं, या इसे 'आईन्यूमेरेबल' पर डालें और LINQ एक्सटेंशन विधि का उपयोग करें ['एन्यूमेरेबल.काउंट'] (http://msdn.microsoft.com/en-us/library/bb535181.aspx) –

संबंधित मुद्दे