[英]converting a list with custom class to json file(unity3D)
创建的 class
[Serializable]
public class Mycustom_gameobject_list
{
public WayspotAnchorPayload game_object_coordinates;
public GameObject storing_gameobject;
}
[Serializable]
public class Gameobject_lsit : MonoBehaviour
{
public List<Mycustom_gameobject_list> Store_gameobjects_list = new List<Mycustom_gameobject_list>();
}
我将游戏数据存储到列表中,然后尝试将其转换为 json
public static void SaveLocalPayloads(List<Mycustom_gameobject_list> savelist)
{
Debug.Log(savelist.Count);
convertData = JsonConvert.SerializeObject(savelist);
Debug.Log(convertData);
}
您不能将GameObject
(或任何UnityEngine.Object
)引用序列化为 JSON 开头
您的情况的主要问题是:除了内置的JsonUtility
,您使用的Newtonsoft Json.NET
也会序列化属性
Unity 内置类型有很多属性,例如GameObject.transform
,它返回一个Transform
,它本身又具有一个属性Component.gameObject
=> 无限序列化循环。
序列化storing_gameobject
的目标到底是什么? 无论如何,在反序列化 JSON 时,Unity 无法正确恢复它。
因此,您应该使用属性[JsonIgnore]
将GameObject
从序列化中排除,例如
[JsonIgnore]
public GameObject storing_gameobject;
然后假设您的列表之后不会更改其顺序和大小,您可以在加载后简单地应用数据,例如
public static void LoadLocalPayloads(List<Mycustom_gameobject_list> savelist)
{
var tempList = JsonConvert.DeserializeObject<List<Mycustom_gameobject_list>(convertData);
for(var i = 0; i < tempList.Count; i++)
{
savelist[i].game_object_coordinates = tempList[i].game_object_coordinates;
// and probably apply it to according object like e.g.
savelist[i].storing_gameobject.transform.position = savelist[i].game_object_coordinates.position;
// etc
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.