[英]create c# object from json array
尝试将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对象(例如{“ name”:“ value”})反序列化为类型'System.Collections.Generic.List`1 [LesRooster.Models.Results]',因为该类型需要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
}
}
}
}
您的类的结构与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; }
}
}
您是否尝试过JSON.NET ? 它是MIT许可的BTW。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.