【问题标题】:Using JsonUtility FromJson to deserialize JSON in UnityUnity中使用JsonUtility FromJson反序列化JSON
【发布时间】:2021-07-23 20:17:30
【问题描述】:

我在尝试统一读取 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);

【问题讨论】:

标签: json unity3d serialization deserialization


【解决方案1】:

在每个类之上必须有[System.Serializable],这是因为UnityEngine 有自己的Serializable 实现,所以你必须指出你想使用的系统而不是Unity。您也不需要[SerializeField],因为如果您想在 Unity 的检查窗口中显示该属性,并且这不会出现在您不需要的任何游戏对象上。您只需将其公开即可。

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

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

[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;
    }
}

【讨论】:

    猜你喜欢
    • 2019-10-12
    • 1970-01-01
    • 1970-01-01
    • 2017-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多