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