JSON-Unity:如何序列化列表? NullReferenceException错误

时间:2019-01-31 12:29:25

标签: json list unity3d

这是我一直试图用来将列表序列化为JSON的代码:

void Save()
        {
            Debug.Log("Save");

            InfoSaveList saveList = new InfoSaveList();

            // this steps through information nodes and collects 
            // the information they contain
            foreach (BaseNode n in rootNode.childrenNodes)
            {
                var id = n.nodeID;
                var info = n.infoLine;

                InfoSave infoSaveData = new InfoSave();
                infoSaveData.nodeID = id;
                infoSaveData.info = info;

                saveList.infoSave.Add(infoSaveData);

            }
            string infoSaveDataToJson = JsonUtility.ToJson(saveList, true);
            Debug.Log(infoSaveDataToJson);
        }


[System.Serializable]
public class InfoSave
{
    public int nodeID;
    public string info;

}

[System.Serializable]
public class InfoSaveList
{

    [SerializeField] public List<InfoSave> infoSave;
}

由于某种原因,我得到了错误:

NullReferenceException: Object reference not set to an instance of an object

在线:

saveList.infoSave.Add(infoSaveData);

我不知道为什么会这样,我正在尝试逐步编写代码,这对我来说似乎很有意义,但我显然缺少了一些东西。

如果我遇到此错误,此错误是否还会正确另存为JSON?还是只能使用没有列表的数组来完成?

1 个答案:

答案 0 :(得分:2)

您根本不会实例化列表。

声明列表时,可以通过构造函数来完成,也可以通过保存功能来实现,因为列表是公共的。

// Constructor :

[System.Serializable]
public class InfoSaveList
{

    [SerializeField] public List<InfoSave> infoSave;

    public InfoSaveList()
    {
         infoSave = new List<InfoSave>();
    }
}

// Declaration :

[System.Serializable]
public class InfoSaveList
{

    [SerializeField] public List<InfoSave> infoSave = new List<InfoSave>();
}

// From Save function

void Save()
{
    // ...
    InfoSaveList saveList = new InfoSaveList();
    saveList.infoSave = new List<InfoSave>();
    // ...
}