2011-06-01 12 views
5

मान लें कि मेरे पास निम्नलिखित JSON पेलोड है;जेएसओएन से सी # कक्षाएं - अज्ञात संपत्ति के नाम

{ 
    "pagemap": { 
    "metatags": [ 
    { 
     "msapplication-task": "name\u003dAbout Tugberk Ugurlu;action-uri\u003d/about;icon-uri\u003d/content/App_Icons/icos/about.ico", 
     "msapplication-task": "name\u003dContact;action-uri\u003d/contact;icon-uri\u003d/content/App_Icons/icos/contact.ico", 
     "msapplication-task": "name\u003dBlog RSS Feed;action-uri\u003dhttp://feeds.feedburner.com/TugberkUgurlu;icon-uri\u003d/content/App_Icons/icos/rss.ico", 
     "msapplication-task": "name\u003dTugberk on Twitter;action-uri\u003dhttp://twitter.com/tourismgeek;icon-uri\u003d/content/App_Icons/icos/twitter.ico", 
     "msapplication-starturl": "./", 
     "application-name": "Tugberk's Blog", 
     "msapplication-tooltip": "bla bla bla..." 
    } 
    ] 
    } 
    } 

मेटटैग के तहत संपत्ति नाम गतिशील हैं। मेरा मतलब है कि इनमें से एक अनुरोध के लिए msapplication-starturl है लेकिन यह किसी अन्य के लिए msapplication-foo हो सकता है।

तो इस तरह के जेएसओएन पेलोड के लिए सबसे अच्छा सी # कक्षा क्या होगी?

संपादित

इस JSON प्रारूप जो Google खोज API देता है का हिस्सा है। इसके अलावा मैं जेसन.नेट का उपयोग कर रहा हूं। गतिशील से कोई और तरीका है?

+0

केवल कुछ हद तक कुछ हद तक टाइप रास्ता * स्थिर प्रतिनिधित्व किया * जा सकता है कि प्रतिनिधित्व किया 'IDictionary है ' या इसी तरह की ('metatags' का एक अनुक्रम तत्व के रूप में) - बेशक, यदि यह गतिशील प्रकृति केवल "msplplication-" पर लागू होती है ... लेकिन इसे और भी भ्रमित क्यों करें? :) मैं ईमानदारी से सच में नहीं जानता कि अन्यथा क्या पूछा जा रहा है: -/ –

+0

@pst यह जेएसओएन प्रारूप का हिस्सा है जो Google खोज एपीआई देता है। इसके अलावा मैं जेसन.नेट का उपयोग कर रहा हूं। गतिशील से कोई दूसरा रास्ता नहीं है, है ना? – tugberk

+0

@pst मुझे लगता है कि सवाल बहुत स्पष्ट है। यह भी समझना बहुत आसान है कि मेटाटैग में पृष्ठ मेटाटैग होता है। इसलिए यह बहुत संभव होगा कि वे अलग होंगे। – tugberk

उत्तर

2

मैं शायद सिर्फ चाहते हैं मेटाटैग सरणी सिर्फ एक Dictionary<string,string> में धकेल दिया पाने के लिए या बस List<string> और फिर एक सहायक वर्ग है कि कुछ आप चाहते हैं में msapplication-task मूल्यों को पार्स करता लिखें।

संपादित करें: मेरा मानना ​​है कि ओपी कैसे अपने मॉडल वर्ग वास्तव में

public class PageMap 
{ 
    public Dictionary<string,string> MetaTags {get;set; } 
} 

होगा कि json वस्तु को देख से में कुछ मदद की तलाश में है, ऐसा लगता है कि RestSharp में deserialize में सक्षम होना चाहिए यह क्लास।

कॉलिंग कोड

var client = new RestClient("somegoogle.com"); 
var request = new RestRequest("Some/Foo/Bar", Method.GET) 
           { RequestFormat = DataFormat.Json }; 
request.AddParameter("p1", "quigybo"); 
client.Execute<PageMan>(request) 
+0

ठीक है, मैं इसे कक्षा में कैसे deserialize कर सकते हैं? – tugberk

+0

@tugberk - शब्दकोश * is * a class। – Greg

+0

@ ग्रेग तो यह होगा: 'सार्वजनिक शब्दकोश <स्ट्रिंग, स्ट्रिंग> मेटाटैग {प्राप्त करें; सेट; } '? – tugberk

2

करने के समान होगा आप गतिशील शिथिल टाइप किया वस्तुओं के निर्माण के लिए JSON.NE टी और JObject पर गौर करना चाहिए। यदि आप इसका उपयोग करने का निर्णय लेते हैं, तो आपको इसे डाउनलोड करने के लिए NuGet होना चाहिए।

उदाहरण:

var client = new WebClient(); 
client.Headers.Add("User-Agent", "your user agent here"); 
var response = client.DownloadString(new Uri("http://www.domain.com/source-page.html")); 
JObject jo = JObject.Parse(response); 
+0

+1, रेस्टशर्प JSON.NET के शीर्ष पर पूर्वाग्रह है, इसलिए ओपी के पास यह स्पष्ट रूप से है। –

+0

मैंने कभी जॉब्जेक्ट के बारे में नहीं सुना था। चीयर्स साथी, बहुत उपयोगी प्रतिक्रिया :-) –

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