C#解析JSON中的数组
我有一个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": "
{
"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文档有很多内容。