2014-10-05 102 views
0

我需要解析的是具有這樣的結構的jsonfile:C#如何解析非陣列陣列

"number": { 
    "1": { 
     "branch": null, 
     "build": 1, 
     "files": [ 
     [ 
      "zip", 
      "client", 
      "4d96d6e8f1543c5fa1184f4771ce16e2" 
     ], 
     [ 
      "zip", 
      "src", 
      "fd397591148fac49a7d57aafdccac6a3" 
     ], 
     [ 
      "zip", 
      "server", 
      "d7e1df9a91ded33be81ee8226b027c2f" 
     ], 
     [ 
      "txt", 
      "changelog", 
      "df98aec1a868ce99532c64f246387d55" 
     ] 
     ], 
     "jobver": "1.3.2", 
     "mcversion": "1.1", 
     "modified": 1328269373.0, 
     "version": "1.3.2.01" 
    }, 
    "2": { 
     "branch": null, 
     "build": 2, 
     "files": [ 
     [ 
      "zip", 
      "server", 
      "80fbd5d837a5867c2dd7b7967e3aa2a9" 
     ], 
     [ 
      "zip", 
      "client", 
      "0cedb5e9844e490f877b6cf04601f929" 
     ], 
     [ 
      "txt", 
      "changelog", 
      "87e9fba9322e9dbc2ea482a2c3edeec6" 
     ], 
     [ 
      "zip", 
      "src", 
      "292d5596879bd13c159a2afe571ec5eb" 
     ] 
     ], 
     "jobver": "1.3.2", 
     "mcversion": "1.1", 
     "modified": 1328613907.0, 
     "version": "1.3.2.2" 
    } 

(整個JSON文件可以在這裏找到:http://files.minecraftforge.net/maven/net/minecraftforge/forge/json
我必須弄明白內部,在「1」和外部導致這個代碼的一部分,但使用Json.NET庫我不知道如何處理「1」和「2」沒有寫一個單獨的類爲每。我有超過1000個解析槽,所以我需要一些可以做到這一點相對簡單的方法。 我目前的解析類看起來是這樣的:

public class forgemaven 
{ 
    public string homepage { get; set; } 
    public string name { get; set; } 
    public List<Number> number { get; set; } 
    public string webpath { get; set; } 
} 

public class Number 
{ 
    public string branch { get; set; } 
    public int build { get; set; } 
    public List<String> files { get; set; } 
    public string jobver { get; set; } 
    public string mcversion { get; set; } 
    public string modified { get; set; } 
    public string version { get; set; } 
} 

注:我刪除了一些東西,比如第1000行版本/構建,因爲它們不需要和json.net似乎罰款那。
我試着用http://json2csharp.com/解析它,可悲的是,我的瀏覽器崩潰。我也嘗試過它的桌面版本,但是這給了我幾乎MB的類,這又不是最優的,因爲新的構建不斷添加到這個文件中,所以我將不得不一直改變我的結構,使用這裏的數據會很糟糕。
所以對於我的問題:我如何以可維護的方式做到這一點?

+0

的可能重複[如何解析會導致非法C#標識符的JSON字符串?](http://stackoverflow.com/questions/24536533/how-can-i-parse-a-json-string-that-would-cause-illegal- C-尖銳的標識符) – 2014-10-05 13:54:37

回答

1

更換

public List<Number> number { get; set; } 

您的問題是{"1" : something, "2" ; something}不是一個JSON數組,這是一個JSON地圖。

在.net中,您需要將其反序列化爲Dictionary<int,TObject>。然後你可以在之後處理它,如果它真的應該是一個List或者一個數組,你不能在反序列化的時候這樣做:你首先得到了不好的json,你必須處理它。

這裏是一個小提琴展示的東西(你給了JSON和你自己的類只有非常輕微的修改:將files屬性是List<List<string>>而不是List<String>)使用Json.Net:https://dotnetfiddle.net/feqFZd

0

您必須

public Dictionary<int,Number> number { get; set; }