JSON到C#类 - 未知的属性名称

时间:2011-06-01 20:56:54

标签: c# .net json

假设我有以下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..."
     }
    ]
   }
  }

mettags下的属性名称是动态的。我的意思是,对于此请求,其中一个是msapplication-starturl,但对于另一个请求可能是msapplication-foo

那么这种JSON有效载荷的最佳c#类是什么?

修改

这是谷歌搜索API提供的JSON格式的一部分。我也在使用Json.NET。还有其他方式而不是动态吗?

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分: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);