Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.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# Can';无法将JSON反序列化到列表中?_C#_Json_Serialization_Deserialization - Fatal编程技术网

C# Can';无法将JSON反序列化到列表中?

C# Can';无法将JSON反序列化到列表中?,c#,json,serialization,deserialization,C#,Json,Serialization,Deserialization,我正在开发一个机器人,它将从JSON中存储的琐事问题列表中提取,但它似乎无法将JSON识别为一个列表,尽管我认为我说得对 相关代码: C#: 将JSON文件中的文本替换为占位符文本,但值不是问题,它可以验证。 出于隐私原因,将实际文件路径替换为单词filepath,但是filepath可以工作,因为它在抛出错误之前确实提取了文件 错误提示: Newtonsoft.Json.JsonSerializationException:'无法反序列化 将当前JSON对象(例如{“name”:“value”

我正在开发一个机器人,它将从JSON中存储的琐事问题列表中提取,但它似乎无法将JSON识别为一个列表,尽管我认为我说得对

相关代码: C#:

将JSON文件中的文本替换为占位符文本,但值不是问题,它可以验证。 出于隐私原因,将实际文件路径替换为单词filepath,但是filepath可以工作,因为它在抛出错误之前确实提取了文件

错误提示:

Newtonsoft.Json.JsonSerializationException:'无法反序列化 将当前JSON对象(例如{“name”:“value”})转换为类型 'System.Collections.Generic.List`1[TriviaBot.Question]'因为 类型需要JSON数组(例如[1,2,3])才能正确反序列化。到 要修复此错误,请将JSON更改为JSON数组(例如[1,2,3]) 或者更改反序列化类型,使其成为普通的.NET类型(例如。 不是integer之类的基元类型,也不是数组之类的集合类型 可以从JSON对象反序列化的。 还可以将JsonObjectAttribute添加到类型以强制其 从JSON对象反序列化。路径“问题”,第2行,位置13


问题出在JSON文件中,它描述的是一个映射,而不是一个数组。 尝试删除

    {
    "Question" :

问题在于JSON文件,它描述的是一个映射,而不是一个数组。 尝试删除

    {
    "Question" :

开头是
},结尾是

json结构有一个名为Question的属性,该属性包含一个项目数组,而不是一个问题数组。正如其他答案所述,您可以修改json文件并删除Question属性。或者,如果您不能修改该结构(例如,如果您从您不拥有的服务中获得该结构),则可以按如下方式修改您的类定义:

类项目
{
公共列表问题{get;set;}
} 
类项目
{
公共字符串类别{get;set;}
公共字符串QuestionText{get;set;}
公共字符串答案{get;set;}
公共整数点{get;set;}
公共布尔询问{get;set;}
}
然后加载对象

public List QuestionList=new List();
公共琐事游戏
{
var deserialized=JsonConvert.DeserializeObject(File.ReadAllText(@“filepath”);
QuestionList=反序列化。问题;
}

您拥有的json结构有一个名为Question的属性,该属性包含一个项目数组,而不是一个问题数组。正如其他答案所述,您可以修改json文件并删除Question属性。或者,如果您不能修改该结构(例如,如果您从您不拥有的服务中获得该结构),则可以按如下方式修改您的类定义:

类项目
{
公共列表问题{get;set;}
} 
类项目
{
公共字符串类别{get;set;}
公共字符串QuestionText{get;set;}
公共字符串答案{get;set;}
公共整数点{get;set;}
公共布尔询问{get;set;}
}
然后加载对象

public List QuestionList=new List();
公共琐事游戏
{
var deserialized=JsonConvert.DeserializeObject(File.ReadAllText(@“filepath”);
QuestionList=反序列化。问题;
}

这是否回答了您的问题?如果您感兴趣,这是一个数据集,带有一个名为
Question
的数据表。因此,如果用实际值替换那些
integer
对象,即.DataTable,则可以将其反序列化为
JsonConvert.DeserializeObject(…)
:var q=JsonConvert.DeserializeObject(JObject.Parse(json).SelectToken(“问题”).ToString()
或问题对象列表,只需将DataTable替换为
列表
。这是否回答了您的问题?如果您感兴趣,这是一个数据集,带有一个名为
Question
的数据表。因此,如果用实际值替换那些
integer
对象,即.DataTable,则可以将其反序列化为
JsonConvert.DeserializeObject(…)
:var q=JsonConvert.DeserializeObject(JObject.Parse(json).SelectToken(“问题”).ToString()
或问题对象列表,只需将DataTable替换为
列表
    {
    "Question" :