2011-06-01 107 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