2011-06-01 104 views
5

比方說,我有以下JSON負載;JSON到C#類 - 未知屬性名稱

{ 
    "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..." 
    } 
    ] 
    } 
    } 

mettags下的屬性名稱是動態的。我的意思是其中一個是msapplication-starturl這個請求,但它可能是另一個msapplication-foo

那麼這種JSON有效載荷最好的c#類是什麼?

編輯

這是JSON格式的谷歌搜索API給人的一部分。另外我正在使用Json.NET。有沒有其他方式比動態?

+0

的可*靜態表示*表示只稍微有些類型的方法是'的IDictionary '(如metatags'的'的序列元件)或類似 - 當然,如果這種動態性質只適用於「msapplication-」......但爲什麼會讓它更混亂? :)老實說,我不確定接下來會問什麼: -/ – 2011-06-01 20:59:45

+0

@pst這是Google搜索API提供的JSON格式的一部分。另外我正在使用Json.NET。除了動態之外,沒有其他辦法了嗎? – tugberk 2011-06-01 21:05:01

+0

@pst我認爲這個問題很清楚。此外,它很容易理解,元標記包含頁面metetags。所以它們很可能會有所不同。 – tugberk 2011-06-01 21:10:07

回答

2

我可能只是想讓MetaTags數組被推入Dictionary<string,string>甚至只是List<string>,然後編寫一個幫助類,將msapplication-task值分析到您想要的東西。

編輯:我相信OP是尋找如何他的模型類實際上是

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

從看那個JSON對象一些幫助,看來RestSharp應該能夠將其反序列化到這個班。

調用代碼將類似於

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

好的,我該如何反序列化成一個類? – tugberk 2011-06-01 21:34:58

+0

@tugberk - 詞典 *是*一類。 – Greg 2011-06-01 21:41:49

+0

@Greg所以它會是這樣的:'public Dictionary Metatags {get;組; ''? – tugberk 2011-06-01 21:45:08

2

你應該看看JSON.NE T和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,用於提及直接JObects,RestSharp是JSON.NET的頂層,所以OP具有隱含的含義。 – 2011-06-02 12:26:41

+0

我從來沒有聽說過JObject。乾杯隊友,非常有用的迴應:-) – 2016-11-18 16:13:17