Unity C#:将JSON文件解析成数据结构

Unity C#: parse JSON file into data structure

我正在尝试在 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"],在上述情况下会 return "What wave characteristic is measured on the vertical axis?"

使用 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);

就这些了

顺便说一句:您还可以在不声明任何模型的情况下动态访问这些属性

var model = JObject.Parse(jsonstring);
var title0 = (string)model["question"][0]["title"];

PS:我用了Json.net

我认为您可以使用上面给出的 JSON 在您的应用程序中创建单个数据结构的一种方法是使用视觉 studio.Once 的 "paste special feature" 您 select从编辑菜单中,您可以选择通过粘贴任何有效的 JSON 从 JSON 创建 class。

粘贴您的 JSON 相关问题后,我得到以下 class:-

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 class 由 array.There 个不同的 class 问题和 visual studio 自动创建的与问题和答案相关的问题组成。

您可以使用 JSON.NET 反序列化将 JSON 值反序列化到您的 RootObject 中:

var questions= JsonConvert.DeserializeObject<RootObject>(jsonString);