C# JObject 反序列化多维数组时意外的标记



我正在使用JObject来读取各种api响应。使用以下 json


{"API":{"Year":["2020","2019","2018","2017","2016","2015"],
"Status": {"Message":"The call returned successfully with years"}}}

我可以使用这个:

dynamic json= JObject.Parse(s);
string[] yrs = json.API.Year.ToObject<string[]>();

其中 s 是 JSON 对象。 这非常适合给我一个简单的年份数组。 我在解析 json 响应中的多维时遇到困难。当我有以下情况时:

{"API":{"Category":[
{"GroupName":"Exterior Accessories","GroupID":"2",
"Items":
[{"Id":"64","Value":"Body Part"},
{"Id":"20","Value":"Body Styling"},
{"Id":"7","Value":"Bras and Hood Protectors"}]
},
{"GroupName":"Interior Accessories","GroupID":"4",
"Items":
[{"Id":"21","Value":"Carpet",
{"Id":"2","Value":"Doors and Components"},
{"Id":"8","Value":"Floor Protection"}]
},
], 
"Status": {"Message":"The call (api.v12.estore.catalograck.com) returned successfully with categories.","DataFound":true,"TimeStamp":"02/02/2020 11:48:27","InternalError":false}}}

如何将其解析为多维数组?

由于您使用的年份是一个简单的内置元素(字符串(,因此您无需创建任何类..但是JSON中的类别是一个对象。要以可以访问其元素的方式访问类别,我建议创建必要的类,然后使用根对象的类别列表来执行所需的操作。

示例代码


public class Item
{
public string Id { get; set; }
public string Value { get; set; }
}
public class Category
{
public string GroupName { get; set; }
public string GroupID { get; set; }
public List<Item> Items { get; set; }
}
public class Status
{
public string Message { get; set; }
public bool DataFound { get; set; }
public string TimeStamp { get; set; }
public bool InternalError { get; set; }
}
public class API
{
public List<Category> Category { get; set; }
public Status Status { get; set; }
}
public class RootObject
{
public API API { get; set; }
}

以上是成功反序列化所需的类,其中 RootObject 类是父类。

在 Main 方法中使用以下方法。

RootObject root = JsonConvert.DeserializeObject<RootObject>(json);
List<Category> categories = root.API.Category;