C#解析JSON中的数组

时间:2017-06-15 20:53:35

标签: c# arrays json json.net

我有这个JSON:

{
   "Date": "3/6/17",
   "Place": "MyPlace",
   "Questions": [{
       "Category": "",
       "Question": "???",
       "Answer": ""
   }, {
       "Category": "",
       "Question": "??? ",
       "Answer": ""
   }, {
       "Category": "",
       "Question": "???",
       "Answer": ""
   }]
}

我想解析这个JSON并将其中的数组作为列表获取 使用var list = JsonConvert.DeserializeObject<List<JToken>>(jsonString);不起作用,因为整个事物不是一个数组,只有在它内部有一个数组 那我该怎么做C#?

2 个答案:

答案 0 :(得分:3)

您可以定义以下类:

public class Question
{

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

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

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

public class QuestionsDatePlace
{
    [JsonProperty("Date")]
    public string Date { get; set; }

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

    [JsonProperty("Questions")]
    public IList<Question> Questions { get; set; }
}

然后将你的json解析为如下:

var list = JsonConvert.DeserializeObject<QuestionsDatePlace>(jsonString);

答案 1 :(得分:0)

最简单的方法,无需创建额外的课程:

dynamic json = new JavaScriptSerializer().Deserialize<dynamic>(jsonString);
var list = json["Questions"];

如果您需要将结果转换为JToken对象序列,请执行此操作。

dynamic json = new JavaScriptSerializer().Deserialize<dynamic>(jsonString);
var list = ((IEnumerable<dynamic>)json["Questions"]).Select(q => new JToken()
{
    Category = q["Category"],
    Question = q["Question"],
    Answer = q["Answer"]
});

为了记录,这需要在References的{​​{1}}节点中添加程序集 System.Web.Extensions