在Unity中使用JsonUtility FromJson反序列化JSON

Using JsonUtility FromJson to deserialize JSON in Unity

我在尝试统一读取 Json 字符串时遇到问题。 我根据收到的 json 响应创建了 类 但我无法反序列化这个 json 我哪里做错了,有人可以帮忙吗?

{
  "status": 200,
  "isSuccess": true,
  "message": "Suggestion Found",
  "response": {
    "result": [
      {
        "OriginalWord": "goodboy",
        "suggests": [
          {
            "suggestWords": "good boy"
          },
          {
            "suggestWords": "Cordoba"
          },
          {
            "suggestWords": "Catawba"
          },
          {
            "suggestWords": "Catawba's"
          }
        ]
      }
    ]
  }
}

我的类

[Serializable]
public class Suggest
{
    [SerializeField]
    public string suggestWords { get; set; }
}

[Serializable]
public class Result
{
    [SerializeField]
    public string OriginalWord { get; set; }
    [SerializeField]
    public List<Suggest> suggests { get; set; }
}

[Serializable]
public class Response
{
    [SerializeField]
    public int status { get; set; }
    [SerializeField]
    public bool isSuccess { get; set; }
    [SerializeField]
    public string message { get; set; }
    [SerializeField]
    public List<Result> result { get; set; }
}

我这样反序列化

Response response = JsonUtility.FromJson<Response>(jsonString);

在每个 class 上面必须有 [System.Serializable] 这是因为 UnityEngine 有自己的 Serializable 实现所以你必须指出它是你想要使用的系统而不是然后团结的。你也不需要 [SerializeField] 因为这是如果你想在 Unity 的检查 window 中显示 属性 并且因为这不会进入你不需要的任何游戏对象。你只需要做到 public.

同样在 class public class Response 中,如果您希望 json 正确映射,您不会使用 public List<Result> result { get; set; },它必须被命名为 response 并且它必须是 1 个对象而不是列表。所以你可以创建一个名为 Results 的 class 并让它有一个名为 result 的列表变量,它将是一个 Result 类型的列表(没有 s)。结果它将有 OriginalWord 和一个名为 suggests

的建议列表

此外,每个 class 都必须有一个构造函数才能工作。所以它看起来像这样:

[System.Serializable]
public class Suggest
{
    public string suggestWords;
    public Suggest(string suggestWords)
    {
        this.suggestWords = suggestWords;
    }
}

[System.Serializable]
public class Result
{
    public string OriginalWord;
    public List<Suggest> suggests;

    public Result(string OriginalWord, List<Suggest> suggests)
    {
        this.OriginalWord = OriginalWord;
        this.suggests = suggests;
    }
}

[System.Serializable]
public class Results
{
    public List<Result> result;

    public Results(List<Result> result)
    {
        this.result = result;
    }
}

[System.Serializable]
public class Response
{
    public int status;
    public bool isSuccess;
    public string message;
    public Results response;

    public Response (int status, bool isSuccess, string message, Result response)
    {
        this.status = status;
        this.isSuccess = isSuccess;
        this.message = message;
        this.response = response;
    }
}