C#反序列化JSON数组

时间:2016-09-09 19:38:52

标签: c# json multidimensional-array

我遇到了反序列化的问题,定义这个JSON结构对于获得一些帮助非常有用。我已经把它恢复到最后一个已知的工作位置,因为我刚刚离开这里。

我的JSON结构是:

[{
"name": "Name1",
"description": "Description of this process",
"Location": "ANY",
"SubItems": [{
    "name": "sub1",
    "required": true,
    "description": "This is a short description"
}, {
    "name": "sub2",
    "required": true,
    "description": "This is a short description"
}, {
    "name": "sub3",
    "required": true,
    "description": "This is a short description"
}],
"outputs": [{
    "name": "out1",
    "required": false
}, {
    "name": "exit code",
    "required": false
}]
}, {
   "name": "Name2",
   "description": "This is a short description",
   "Location": "ANY",
   "SubItems": [{
       "name": "sub1",
       "required": false,
       "description": "This is a short description"
      }]
   }]

这是我上次工作的C#Json定义。

public class JsonObject
{
    [JsonProperty("name")]
    public string ProcessName { get; set; }

    [JsonProperty("description")]
    public string ProcessDescription { get; set; }

    [JsonProperty("Location")]
    public string KnownLocation { get; set; }
}

我目前只是为了测试而捕获了几个定义。

这是我的反序列化对象

var Object = JsonConvert.DeserializeObject <List<JsonObject>>(txt);
            foreach (JsonObject JsonObject in Object)
            {
                Console.WriteLine("Name: " + JsonObject.ProcessName);
                Console.WriteLine();
                Console.WriteLine("Description: " +JsonObject.ProcessDescription);
                Console.WriteLine();
            }

正如我所说,我可以在输出中至少获得前3个最顶级的JSON元素。当我开始尝试获取“SubItems”和“outputs”

时,问题就出现了

我按照下面链接的帖子的结构并且非常努力地理解它,但是过了一段时间我意识到解决方案不适合这个问题。我只是有一个多维数组JSON对象。字面上有一个顶层和2个子层

我试图尝试做...

List<List<JsonObject>>Object = JsonConvert.DeserializeObject <List<List<JsonObject>>>(txt);

并尝试使用3组JSON定义,使用不同名称的2个相同列表。

并实现了分层的foreach循环,但后来我无法访问最顶级JSON的定义,也没有为“SubItems”的实际元素编写

我需要的是真正获得每个对象。

How to deserialize a json file with multidimensional array to convert it to object in c#

相关问题

1 个答案:

答案 0 :(得分:2)

它不是一个多维数组。只是一个包含数组的数组对象。 所以你的模型可以如下

public class SubItem
{
    public string Name { get; set; }
    public bool Required { get; set; }
    public string Description { get; set; }
}

public class Output
{
    public string Name { get; set; }
    public bool Required { get; set; }
}

public class JsonObject
{
    public string Name { get; set; }
    public string Description { get; set; }
    public string Location { get; set; }
    public List<SubItem> SubItems { get; set; }
    public List<Output> Outputs { get; set; }
}

你可以反序列化为

 var obj = JsonConvert.DeserializeObject<List<JsonObject>>(jsonstring);

PS:您可以使用JsonProperty来装饰该模型