2011-01-23 8 views
5

का उपयोग करके एक ऐरे के बजाय JSON ऑब्जेक्ट बनाएं, हे दोस्तों, आशा है कि आप सभी छुट्टियों पर अच्छा ब्रेक लेंगे।LINQ/JavaScriptSerializer

मैंने एक वेब सेवा बनाई है जो LINQ/जावास्क्रिप्टसेरियलाइज़र का उपयोग कर JSON स्ट्रिंग के रूप में उन शहरों के भीतर शहरों और कंपनियों की एक सूची देता है।

मेरे कोड मोटे तौर पर

var data = from c in db.Companies 
      group c by c.City into cities 
      select new 
      { 
       city = cities.Key, 
       companies = from company in cities 
        select company.Name 
      }; 

JavaScriptSerializer jss = new JavaScriptSerializer(); 
return jss.Serialize(data); 

कि निम्नलिखित JSON स्ट्रिंग

[ 
    {"city":"Auckland","companies":["Company1","Company2"]}, 
    {"city":"Wellington","companies":["Company3","Company4","Company5"]} 
] 

हालांकि मैं तो मैं आसानी से इसे से खोज सकते हैं शहर कुंजी बनाना चाहते उत्पादन होता है

उदाहरण

[ 
    "Auckland" : {"companies":["Company1","Company2"]}, 
    "Wellington" : {"companies":["Company3","Company4","Company5"]} 
] 

कोई भी विचार के लिए?

+0

मुझे नहीं लगता कि यह भी वैध JSON है। क्या आप सुर हैं, स्क्वायर ब्रैकेट के बजाय घुंघराले ब्रैकेट का मतलब नहीं है? –

+0

हे @ मार्क, क्या आप दूसरे का जिक्र कर रहे हैं? मैंने मैन्युअल रूप से टाइप किया है कि त्रुटि के लिए क्षमा करें। – Marko

उत्तर

8

बस एक विचार ... कोशिश

var data = db.Companies 
      .GroupBy(c => c.City) 
      .ToDictionary(g => g.Key, 
          g => new { companies = g.Select(c => c.Name) }); 

तो यह एक Dictionary<string, xxx> जहां xxx केवल एक प्रॉपर्टी के साथ एक अनाम प्रकार है का निर्माण करेगा, "कंपनियों" कंपनी के नाम का एक क्रम है।

+0

धन्यवाद जॉन, मुझे एक अपवाद मिल रहा है हालांकि 'त्रुटि 2 तर्क 3:' अज्ञात टाइप # 1 'से' सिस्टम 'को परिवर्तित नहीं कर सकता। चयन। जेनेरिक। IEqualityComparer ' ' – Marko

+0

@ मार्को I * सोचता है * मुझे वहां समस्या दिखाई देती है - अद्यतन का प्रयास करें? (जॉन- आशा है कि आपको मुझे हैकिंग दूर नहीं लगेगा; पी) –

+0

@Marc: इसके लिए धन्यवाद :) स्क्रॉलबार से छुटकारा पाने के लिए फिर से संपादित करें ... –