这是我一直试图用来将列表序列化为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?还是只能使用没有列表的数组来完成?
答案 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>();
// ...
}