我尝试在Unity C#中创建自定义修订测验程序,该程序允许用户使用JSON文件将问题加载到程序中,结构如下:
{
"question": [
{
"title": "What wave characteristic is measured on the vertical axis?",
"answers": {
"correct": "Amplitude",
"wrong": [
"Frequency",
"Period",
"Speed"
]
}
},
{
"title": "Which of these is a vector quantity?",
"answers": {
"correct": "Velocity",
"wrong": [
"Speed",
"Time",
"Mass"
]
}
}
]
}
我设法使用StreamReader从文件中读取程序,但是在尝试将其放入单个数据结构时遇到了很多麻烦。
我已经看过其他解决方案使用类并为他们的解决方案手动定义结构,但我不知道如何实现这一点a)复杂的结构和b)一个结构可以有一个其中的项目数量(我希望支持任何数量的问题)。如果最好的方法是定义这些类,我该如何引用其中的项?在过去,我使用Python 3.6的json
库json.loads()
函数解析了JSON,并且工作得很好,创建了一个单维的多维数组/字典结构可以很容易地工作。
简单来说,我目前有一个字符串,我已从其中包含JSON数据的文件中读取。我如何将其合成为一个我可以轻松访问的数组,例如questions[question][0]["title"]
,在上述情况下会返回"What wave characteristic is measured on the vertical axis?"
?
答案 0 :(得分:1)
使用this site生成您的模型。
public class Answers
{
public string correct { get; set; }
public List<string> wrong { get; set; }
}
public class Question
{
public string title { get; set; }
public Answers answers { get; set; }
}
public class RootObject
{
public List<Question> question { get; set; }
}
var model = JsonConvert.DeserializeObject<RootObject>(jsonstring);
这就是全部
BTW:您还可以动态访问这些属性,而无需声明任何模型
var model = JObject.Parse(jsonstring);
var title0 = (string)model["question"][0]["title"];
PS:我使用了Json.net
答案 1 :(得分:0)
我认为使用上面给出的JSON在应用程序中创建单个数据结构的一种方法是使用&#34;粘贴特殊功能&#34;视觉工作室。一旦从编辑菜单中选择它,您可以选择通过粘贴任何有效的JSON从JSON创建类。
在粘贴与问题相关的JSON后,我得到以下课程: -
public class Rootobject
{
public Question[] question { get; set; }
}
public class Question
{
public string title { get; set; }
public Answers answers { get; set; }
}
public class Answers
{
public string correct { get; set; }
public string[] wrong { get; set; }
}
单个Rootobject类由Question数组组成。可视工作室自动创建与问题和答案相关的不同类。
您可以使用JSON.NET desrialization将JSON值反序列化到RootObject中:
var questions= JsonConvert.DeserializeObject<RootObject>(jsonString);