从json数组创建c#对象

时间:2016-09-09 13:44:31

标签: c# arrays json

我在尝试将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
                }
            }
        }
}

2 个答案:

答案 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。