c#如何解析非数组数组

本文关键字:数组 何解析 | 更新日期: 2023-09-27 18:25:44

我需要解析一个结构如下的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"answers"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的类,这也不是最佳的,因为新的构建不断添加到这个文件中,所以我必须一直更改我的结构,使用这里的数据会很可怕
因此,我的问题是:我如何以可维护的方式做到这一点?

c#如何解析非数组数组

您的问题是{"1" : something, "2" ; something}不是json数组,而是json映射。

在.net中,您将希望将其反序列化为Dictionary<int,TObject>。然后,如果它真的应该是"List"或数组,你可以在之后处理它,但在反序列化时不能这样做:你一开始就得到了糟糕的json,你必须处理它。

下面是一个使用json.Net演示的fiddle(您给出的json和您自己的类只做了很小的修改:files属性是List<List<string>>而不是List<String>):https://dotnetfiddle.net/feqFZd

您必须更换

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

带有

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