繁体   English   中英

将带有自定义 class 的列表转换为 json 文件(unity3D)

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM