Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#解析JSON中的数组_C#_Arrays_Json_Json.net - Fatal编程技术网

C#解析JSON中的数组

C#解析JSON中的数组,c#,arrays,json,json.net,C#,Arrays,Json,Json.net,我有一个JSON: { "Date": "3/6/17", "Place": "MyPlace", "Questions": [{ "Category": "", "Question": "???", "Answer": "" }, { "Category": "", "Question": "??? ", "Answer": "" }, { "Category": "

我有一个JSON:

{
   "Date": "3/6/17",
   "Place": "MyPlace",
   "Questions": [{
       "Category": "",
       "Question": "???",
       "Answer": ""
   }, {
       "Category": "",
       "Question": "??? ",
       "Answer": ""
   }, {
       "Category": "",
       "Question": "???",
       "Answer": ""
   }]
}
我想解析这个JSON并将其中的数组作为列表获取。
使用
var list=JsonConvert.DeserializeObject(jsonString)不起作用,因为作为一个整体的东西不是一个数组,只有在它里面有一个数组。

那么如何在C#中实现这一点呢?

您可以定义以下类:

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; }
}
公开课问题
{
[JsonProperty(“类别”)]
公共字符串类别{get;set;}
[JsonProperty(“问题”)]
公共字符串问题{get;set;}
[JsonProperty(“答案”)]
公共字符串答案{get;set;}
}
公共课问题
{
[JsonProperty(“日期”)]
公共字符串日期{get;set;}
[JsonProperty(“地点”)]
公共字符串Place{get;set;}
[JsonProperty(“问题”)]
公共IList问题{get;set;}
}
然后按如下方式对json进行去序列化:

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

您可以定义以下类:

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; }
}
公开课问题
{
[JsonProperty(“类别”)]
公共字符串类别{get;set;}
[JsonProperty(“问题”)]
公共字符串问题{get;set;}
[JsonProperty(“答案”)]
公共字符串答案{get;set;}
}
公共课问题
{
[JsonProperty(“日期”)]
公共字符串日期{get;set;}
[JsonProperty(“地点”)]
公共字符串Place{get;set;}
[JsonProperty(“问题”)]
公共IList问题{get;set;}
}
然后按如下方式对json进行去序列化:

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

最简单的方法,无需创建其他类,它是:

dynamic json = new JavaScriptSerializer().Deserialize<dynamic>(jsonString);
var list = json["Questions"];
dynamic json=new JavaScriptSerializer()。反序列化(jsonString);
var list=json[“问题”];
如果需要将结果强制转换为一系列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"]
});
dynamic json=new JavaScriptSerializer()。反序列化(jsonString);
var list=((IEnumerable)json[“问题”])。选择(q=>newjtoken()
{
类别=q[“类别”],
问题=q[“问题”],
答案=q[“答案”]
});

作为记录,这需要在
解决方案资源管理器的
引用
节点中添加程序集System.Web.Extensions,这是一种最简单的方法,无需创建其他类,它是:

dynamic json = new JavaScriptSerializer().Deserialize<dynamic>(jsonString);
var list = json["Questions"];
dynamic json=new JavaScriptSerializer()。反序列化(jsonString);
var list=json[“问题”];
如果需要将结果强制转换为一系列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"]
});
dynamic json=new JavaScriptSerializer()。反序列化(jsonString);
var list=((IEnumerable)json[“问题”])。选择(q=>newjtoken()
{
类别=q[“类别”],
问题=q[“问题”],
答案=q[“答案”]
});

作为记录,这需要在
解决方案资源管理器的
引用
节点中添加程序集System.Web.Extensions

创建一些与您的模型匹配的C类,并反序列化到这些类中。@Amy您能给我一个如何做的示例吗?@Amitaros有很多这样做的示例。Newtonsoft文档有很多。创建一些与您的模型匹配的C#类,并反序列化到这些类中。@Amy您能给我一个如何实现的示例吗?@amitairos有很多这样做的示例。Newtonsoft文档有很多内容。