Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JSON到C#类-未知属性名称_C#_.net_Json - Fatal编程技术网

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

JSON到C#类-未知属性名称,c#,.net,json,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\u

假设我有以下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。除了动态,还有其他方法吗?

我可能只想让MetaTags数组被推到
字典中,甚至是
列表中,然后编写一个助手类,将
msapplication task
值解析成您想要的内容

编辑:我相信OP正在寻求一些帮助,了解他的模型课的实际情况

public class PageMap
{
    public Dictionary<string,string> MetaTags {get;set; }
}
公共类页面映射
{
公共字典元标记{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)
var-client=newrestclient(“somegoogle.com”);
var request=new RestRequest(“Some/Foo/Bar”,Method.GET)
{RequestFormat=DataFormat.Json};
AddParameter(“p1”、“quigybo”);
client.Execute(请求)
您应该了解T和如何构建动态松散类型对象。如果你决定使用它,你应该下载它

例如:

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);

唯一可以静态表示的有点类型化的方式是
IDictionary
(作为
元标记的序列元素)或类似的方式——当然,如果这种动态特性只适用于“msapplication-”。。。但为什么要让它更令人困惑呢?:)老实说,我真的不知道有什么问题需要回答:-/@pst这是谷歌搜索API提供的JSON格式的一部分。我也在使用Json.NET。除了动态,没有别的方法了,是吗?@pst我认为问题很清楚。此外,很容易理解元标记包含页面标记。所以很有可能他们会有所不同。@tugberk然后看我的评论。或者,考虑一个JSON机制,允许/使用<代码>动态< /代码>。JSON不要求字典中的关键字是唯一的吗?这是有效的json吗?@tugberk-Dictionary是一个类。@Greg因此:
公共字典元标记{get;set;}
?对于具有可变类型(如Dictionary)的属性,使用公共setter很少是个好主意。我会将setter设置为私有。@CodeInChaos OP需要验证这是否是JSON.NET序列化的可行选项(RestSharp使用)+1来提及直接JObects,RestSharp是JSON.NET之上的biult,因此OP隐式地具有此功能。我从未听说过JObject。干杯,伙计,非常有用的回答:-)