【发布时间】:2020-10-07 21:40:54
【问题描述】:
我正在开发一个机器人,它将从存储在 JSON 中的琐事问题列表中提取,但它似乎无法将 JSON 识别为列表,即使我认为我说得对。
相关代码: C#:
class Question
{
public string Catagory { get; set; }
public string QuestionText { get; set; }
public string Answer { get; set; }
public int Points { get; set; }
public bool asked { get; set; }
}
class TriviaGame
{
public List<Question> QuestionList = new List<Question>();
public TriviaGame()
{
QuestionList = JsonConvert.DeserializeObject<List<Question>>(File.ReadAllText(@"filepath"));
}
JSON:
{
"Question" : [
{
"Catagory": "text",
"QuestionText": "text",
"Answer": "text",
"Points": integer,
"Asked": false
},
{
"Catagory": "text",
"QuestionText": "text",
"Answer": "text",
"Points": integer,
"Asked": false
},
{
"Catagory": "text",
"QuestionText": "text",
"Answer": "text",
"Points": integer,
"Asked": false
}]
}
用占位符文本替换了 JSON 文件中的文本,但值不是它验证的问题。 出于隐私原因,将实际文件路径替换为单词文件路径,但文件路径有效,因为它确实会在引发错误之前提取文件。
给定错误:
Newtonsoft.Json.JsonSerializationException: '无法反序列化 当前 JSON 对象(例如 {"name":"value"})转换为类型 'System.Collections.Generic.List`1[TriviaBot.Question]' 因为 type 需要一个 JSON 数组(例如 [1,2,3])才能正确反序列化。到 修复此错误或者将 JSON 更改为 JSON 数组(例如 [1,2,3]) 或更改反序列化类型,使其成为普通的 .NET 类型(例如 不是像整数这样的原始类型,不是像数组这样的集合类型 或列表)可以从 JSON 对象反序列化。 JsonObjectAttribute 也可以添加到类型中以强制它 从 JSON 对象反序列化。路径“问题”,第 2 行,位置 13。'
【问题讨论】:
-
这能回答你的问题吗? Deserialize Json to List C#
-
如果您有兴趣,那是一个 DataSet,其中包含一个名为
Question的 DataTable。所以,你可以把它反序列化为JsonConvert.DeserializeObject<DataSet>(...),如果你把那些integer的东西换成一个实际的值,那就是。 -
或DataTable直接:
var q = JsonConvert.DeserializeObject<DataTable>(JObject.Parse(json).SelectToken("Question").ToString());或问题对象列表,只需将DataTable替换为List<Question>即可。
标签: c# json serialization deserialization