2016-04-25 11 views
2

次のJSON(Json.NETを使用)をオブジェクトに逆シリアル化したいですが、クラス名の先頭に番号を付ける必要があります。Deserialise JSON with Json.NET

この例は、Wikipedia article APIです。 Using the APIはJSON応答を返します。 "pages"キーの中に"16689396"があることに注意してください。

{ 
    "batchcomplete":"", 
    "continue":{ 
     "grncontinue":"0.893378504602|0.893378998188|35714269|0", 
     "continue":"grncontinue||" 
    }, 
    "query":{ 
     "pages":{ 
     "16689396":{ 
      "pageid":16689396, 
      "ns":0, 
      "title":"Jalan Juru", 
      "extract":"<p><b>Jalan Juru</b> (Penang state road <i>P176</i>) is a major road in Penang, Malaysia.</p>\n\n<h2><span id=\"List_of_junctions\">List of junctions</span></h2>\n<p></p>\n<p><br></p>" 
     } 
     } 
    } 
} 

記事に基づいて変更された番号を含むこのJSONをどのように逆シリアル化できますか?

答えて

2

QueryクラスのPagesプロパティはDictionary<int, Page>またはDictionary<string, Page>である必要があります。あなたが提供しましたJSONと

完全な例 - 私は名前の意味のいくつかを推測しなければならなかった:

using System; 
using System.Collections.Generic; 
using System.IO; 
using Newtonsoft.Json; 

public class Root 
{ 
    [JsonProperty("batchcomplete")] 
    public string BatchComplete { get; set; } 
    [JsonProperty("continue")] 
    public Continuation Continuation { get; set; } 
    [JsonProperty("query")] 
    public Query Query { get; set; } 
} 

public class Continuation 
{ 
    [JsonProperty("grncontinue")] 
    public string GrnContinue { get; set; } 
    [JsonProperty("continue")] 
    public string Continue { get; set; } 
} 

public class Query 
{ 
    [JsonProperty("pages")] 
    public Dictionary<int, Page> Pages { get; set; } 
} 

public class Page 
{ 
    [JsonProperty("pageid")] 
    public int Id { get; set; } 
    [JsonProperty("ns")] 
    public int Ns { get; set; } 
    [JsonProperty("title")] 
    public string Title { get; set; } 
    [JsonProperty("extract")] 
    public string Extract { get; set; } 
} 

class Test 
{ 
    static void Main() 
    { 
     string text = File.ReadAllText("test.json"); 
     var root = JsonConvert.DeserializeObject<Root>(text); 
     Console.WriteLine(root.Query.Pages[16689396].Title); 
    }  
} 
1

は、あなたが実装することができ、独自のDeSerializerまたはあなたがそれをデシリアライズする前にJSONを編集します。

3

関連質問:Json deserialize from wikipedia api with c#

基本的に、あなたは、命名規則の動的な性質を可能辞書にページのクラスを使用してから変更する必要があります。

クラス定義

public class pageval 
{ 
    public int pageid { get; set; } 
    public int ns { get; set; } 
    public string title { get; set; } 
    public string extract { get; set; } 
} 

public class Query 
{ 
    public Dictionary<string, pageval> pages { get; set; } 
} 

public class Limits 
{ 
    public int extracts { get; set; } 
} 

public class RootObject 
{ 
    public string batchcomplete { get; set; } 
    public Query query { get; set; } 
    public Limits limits { get; set; } 
} 

デシリアライズ

var root = JsonConvert.DeserializeObject<RootObject>(__YOUR_JSON_HERE__); 
var page = responseJson.query.pages["16689396"]; 
関連する問題