我在尝试将json数组转换为对象时收到错误。
我有一个多层的Json数组,如下所示:
{
"error":"0",
"result":{
"activities":{
"1":{
"activity_id":"15803",
"activity_id_name":"Ashtanga vinyasa",
"schedule":{
"1":{
"available":"30",
"start":"09:00:00"
}
}
},
"2":{
"activity_id":"15804",
"activity_id_name":"Yin/Yang",
"schedule":{
"1":{
"available":"30",
"start":"10:30:00"
}
}
},
"3":{
"activity_id":"15805",
"activity_id_name":"Stress relief",
"schedule":{
"1":{
"available":"30",
"start":"20:00:00"
}
}
}
},
"json_code":"2"
},
"id":null
}
从此我创建了一个如下所示的对象:
namespace LesRooster.Models
{
public class JsonGroup
{
public string Error { get; set; }
public List<Results> Result { get; set; }
public string Id { get; set; }
}
public class Results
{
public Activities YogaActivities { get; set; }
public int JsonCode { get; set; }
}
public class Activities
{
public int ActivityId { get; set; }
public string ActivityIdName { get; set; }
public Schedule LesSchedule { get; set; }
}
public class Schedule
{
public int Available { get; set; }
public DateTime Start { get; set; }
}
}
当我尝试使用以下行将数组添加到对象时:
JsonGroup jgroup = JsonConvert.DeserializeObject<JsonGroup>(JsonArrayCode);
我收到以下错误:
无法反序列化当前的JSON对象(例如{&#34; name&#34;:&#34; value&#34;}) 进入类型 &#39; System.Collections.Generic.List`1 [LesRooster.Models.Results]&#39;因为 该类型需要一个JSON数组(例如[1,2,3])来反序列化 正确。
有什么方法可以解决这个问题吗?我想将它作为一个对象,因为它很容易在我的mvc5应用程序的视图中传递。
我尝试使用谷歌搜索,但我找到的所有解决方案都是针对单维json数组。
我请求json数组的API文档如下所示:
json_code integer
Constant value: 2
activities hash
{
index : {
activity_id: integer
activity_id_name: string
schedule: hash
{
index : {
available: integer
start: time
}
}
}
}
答案 0 :(得分:3)
类的结构与JSON的结构不匹配 - 这会导致异常。我对您的类进行了一些更改以反映JSON结构。
主要区别在于,活动不是Array
,而是Dictionary
。
namespace LesRooster.Models
{
public class JsonGroup
{
public string Error { get; set; }
public Result Result { get; set; }
public string Id { get; set; }
}
public class Result {
public IDictionary<string, Activities> Activities {get; set;}
public int JsonCode {get; set;}
}
public class Activities
{
[JsonProperty("activity_id")]
public int ActivityId { get; set; }
[JsonProperty("activity_id_name")]
public string ActivityIdName { get; set; }
public IDictionary<string, Schedule> Schedule { get; set; }
}
public class Schedule
{
public int Available { get; set; }
public DateTime Start { get; set; }
}
}
答案 1 :(得分:-1)
你试过JSON.NET吗?麻省理工学院授权BTW。