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