c#如何解析非数组数组

时间:2014-10-05 09:52:24

标签: c# json json.net

我需要解析一个结构如下的jsonfile:

"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行版本/ build,因为它们不需要,json.net看起来很好。
我试图用http://json2csharp.com/解析它,遗憾的是崩溃了我的webbrowser。我也尝试了它的桌面版本,但这给了我几乎MB的类,这也不是最佳的,因为新版本不断添加到这个文件中,所以我必须一直改变我的结构,它使用这里的数据会很可怕。
所以对于我的问题:我如何以可维护的方式做到这一点?

2 个答案:

答案 0 :(得分:1)

你的问题是{"1" : something, "2" ; something}不是json数组,它是json地图。

在.net中,您需要将其反序列化为Dictionary<int,TObject>。然后你可以在事后处理它,如果它真的应该是一个`List&#39;或者数组,但是在反序列化时你不能这样做:你首先得到了糟糕的json,你必须处理它。

这是一个小提示,展示了这个东西(你给的json和你自己的类只有非常轻微的修改:files属性是List<List<string>>而不是List<String>)使用Json .Net:https://dotnetfiddle.net/feqFZd

答案 1 :(得分:0)

您必须替换

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

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