2014-01-31 73 views
1

我试图从使用以下格式Json.NET,Web服务返回数据的Web服务解析JSON:Json.Net反序列化JSON与索引名对象

{ 
    "0": { 
     "ID": 193, 
     "Title": "Title 193", 
     "Description": "Description 193", 
     "Order": 5, 
     "Hyperlink": "http://someurl.com" 
    }, 
    "1": { 
     "ID": 228, 
     "Title": "Title 228", 
     "Description": "Description 228", 
     "Order": 4, 
     "Hyperlink": "http://someurl.com" 
    }, 
    "2": { 
     "ID": 234, 
     "Title": "Title 234", 
     "Description": "Description 234", 
     "Order": 3, 
     "Hyperlink": "http://someurl.com" 
    } 
} 

我以前json2sharp生成从JSON类:

public class __invalid_type__0 
{ 
    public int ID { get; set; } 
    public string Title { get; set; } 
    public string Description { get; set; } 
    public int Order { get; set; } 
    public string Hyperlink { get; set; } 
} 

public class __invalid_type__1 
{ 
    public int ID { get; set; } 
    public string Title { get; set; } 
    public string Description { get; set; } 
    public int Order { get; set; } 
    public string Hyperlink { get; set; } 
} 

public class __invalid_type__2 
{ 
    public int ID { get; set; } 
    public string Title { get; set; } 
    public string Description { get; set; } 
    public int Order { get; set; } 
    public string Hyperlink { get; set; } 
} 

public class RootObject 
{ 
    public __invalid_type__0 __invalid_name__0 { get; set; } 
    public __invalid_type__1 __invalid_name__1 { get; set; } 
    public __invalid_type__2 __invalid_name__2 { get; set; } 
} 

我再清理类,并留下了以下内容:

public class Articles 
{ 
    public int ID { get; set; } 
    public string Title { get; set; } 
    public string Description { get; set; } 
    public int Order { get; set; } 
    public string Hyperlink { get; set; } 
} 

public class FeaturedArticles 
{ 
    public List<Articles> articles { get; set; } 
} 

当我尝试将数据加载到我的单身人士使用的应用程序:

private void fetchFeaturedArticles() 
    { 
     var client = new RestClient (_featuredArticlesJsonUrl); 
     var request = new RestRequest (Method.GET); 
     var response = client.Execute (request); 
     _featuredArticles = JsonConvert.DeserializeObject<FeaturedArticles> (response.Content); 

     foreach (Articles a in _featuredArticles.Articles) 
      Console.WriteLine (a.Title); 
    } 

我发现文章没有得到反序列化。

我已验证JSON数据是从Web服务返回的。我相信问题存在于我的JSON提要的结构中,其中从提要返回的每个项目被赋予一个名称,该名称等于该项目被返回的索引。

我是新来使用Json.NET,所以我不知道我应该如何继续;我无法更改JSON Feed的结构,但需要使用它的数据。任何人有任何建议?

+0

尝试使用词典<字符串,文章>而不是List

+0

@jason'词典'似乎更合适 – tvanfosson

回答

4

你不需要FeaturedArticles类,你可以反序列化JSON的成Dictionary<string, Articles>这样的:

private void fetchFeaturedArticles() 
{ 
    var client = new RestClient (_featuredArticlesJsonUrl); 
    var request = new RestRequest (Method.GET); 
    var response = client.Execute (request); 

    Dictionary<string, Articles> _featuredArticles = JsonConvert.DeserializeObject<Dictionary<string, Articles>>(response.Content); 

    foreach (string key in _featuredArticles.Keys) 
    { 
     Console.WriteLine(_featuredArticles[key].Title); 
    } 

} 

演示:https://dotnetfiddle.net/ZE1BMl

+0

真棒:)谢谢你的工作就像一个魅力! – g0ld2k