C#如何解析非阵列阵列

问题描述:

我需要解析的是具有这样的结构的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

更换

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

您必须

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