将特定 JSON 字段反序列化为 Unity 中的对象列表
Deserializing specific JSON fields into a list of objects in Unity
对于个人项目,我试图将一个大 Json 数组反序列化为一个对象列表,但是在遵循其他指南时我反复 运行 遇到问题。我有以下 json 文件:
{
PokemonJSONList : [
{
"id": 1,
"region": "Kanto",
"name": "Bulbasaur",
"typeList": [ "Grass", "Poison" ]
},
{
"id": 2,
"region": "Kanto",
"name": "Ivysaur",
"typeList": [ "Grass", "Poison" ]
},
{
"id": 3,
"region": "Kanto",
"name": "Venusaur",
"typeList": [ "Grass", "Poison" ]
},
{
"id": 3,
"form": "f2",
"region": "Kalos",
"name": "Mega Venusaur",
"typeList": [ "Grass", "Poison" ]
},
{
"id": 3,
"form": "f3",
"region": "Galar",
"name": "G-Max Venusaur",
"typeList": [ "Grass", "Poison" ]
},
{
"id": 4,
"region": "Kanto",
"name": "Charmander",
"typeList": [ "Fire" ]
},
...
{
"id": 898,
"form": "f4",
"region": "Galar",
"Legend": "true",
"name": "Shadow Rider Calyrex",
"typeList": [ "Psychic", "Grass" ]
}
]
}
如您所见,一些 json 条目比其他条目具有更多的键值对,因为此 json 文件不仅仅用于此项目。我只需要名称、区域、类型列表和图例(未显示,因为 json 文件的长度相当长)字段。我也有这个 class:
[System.Serializable]
public class PokemonList : MonoBehaviour
{
public List<PokemonOBJ> PokemonJSONList;
}
旨在接收此 json 数据,以及此 class:
[System.Serializable]
public class PokemonOBJ : MonoBehaviour
{
public string Name { get; set; }
public string Region { get; set; }
public List<string> TypeList { get; set; }
public bool Legend { get; set; }
}
作为存储每个条目数据的基础对象。但是,当尝试序列化 json 文件时:
string jsonString = @"Assets/JSON/data.json";
public PokemonList PokemonDB;
PokemonDB = JsonUtility.FromJson<PokemonList>(jsonString);
导致“无法将 JSON 反序列化为 PokemonList 类型的新实例”
我使用的教程显示将 PokemonOBJ 用于 FromJson,但这会导致 vs 本身出现错误,我在这里对如何使其正常工作以及我做错了什么感到有点迷茫。
来自docs:
Only plain classes and structures are supported; classes derived from
UnityEngine.Object (such as MonoBehaviour or ScriptableObject) are
not.
对于个人项目,我试图将一个大 Json 数组反序列化为一个对象列表,但是在遵循其他指南时我反复 运行 遇到问题。我有以下 json 文件:
{
PokemonJSONList : [
{
"id": 1,
"region": "Kanto",
"name": "Bulbasaur",
"typeList": [ "Grass", "Poison" ]
},
{
"id": 2,
"region": "Kanto",
"name": "Ivysaur",
"typeList": [ "Grass", "Poison" ]
},
{
"id": 3,
"region": "Kanto",
"name": "Venusaur",
"typeList": [ "Grass", "Poison" ]
},
{
"id": 3,
"form": "f2",
"region": "Kalos",
"name": "Mega Venusaur",
"typeList": [ "Grass", "Poison" ]
},
{
"id": 3,
"form": "f3",
"region": "Galar",
"name": "G-Max Venusaur",
"typeList": [ "Grass", "Poison" ]
},
{
"id": 4,
"region": "Kanto",
"name": "Charmander",
"typeList": [ "Fire" ]
},
...
{
"id": 898,
"form": "f4",
"region": "Galar",
"Legend": "true",
"name": "Shadow Rider Calyrex",
"typeList": [ "Psychic", "Grass" ]
}
]
}
如您所见,一些 json 条目比其他条目具有更多的键值对,因为此 json 文件不仅仅用于此项目。我只需要名称、区域、类型列表和图例(未显示,因为 json 文件的长度相当长)字段。我也有这个 class:
[System.Serializable]
public class PokemonList : MonoBehaviour
{
public List<PokemonOBJ> PokemonJSONList;
}
旨在接收此 json 数据,以及此 class:
[System.Serializable]
public class PokemonOBJ : MonoBehaviour
{
public string Name { get; set; }
public string Region { get; set; }
public List<string> TypeList { get; set; }
public bool Legend { get; set; }
}
作为存储每个条目数据的基础对象。但是,当尝试序列化 json 文件时:
string jsonString = @"Assets/JSON/data.json";
public PokemonList PokemonDB;
PokemonDB = JsonUtility.FromJson<PokemonList>(jsonString);
导致“无法将 JSON 反序列化为 PokemonList 类型的新实例” 我使用的教程显示将 PokemonOBJ 用于 FromJson,但这会导致 vs 本身出现错误,我在这里对如何使其正常工作以及我做错了什么感到有点迷茫。
来自docs:
Only plain classes and structures are supported; classes derived from UnityEngine.Object (such as MonoBehaviour or ScriptableObject) are not.