我目前正在尝试将n x m字段数组保存为文本文件中的json。 我知道Unity不支持顶层JSON反序列化的数组类型。因此我做了一个看起来像这样的课程
public class Field{
public int[][] id;
public GameObject[][] gameObjectReference;
}
游戏对象数组存储在json文件中并不相关,但我仍想保存id数组。到目前为止,我有这个代码snipet来测试这个。
String[] aRows = System.IO.File.ReadAllLines(pathToSomeFile);
field = new Field ();
field.id = new int[aRows [0].Split(';').Length][];
for (int i = 0; i < aRows [0].Split(';').Length; i++) {
field.id [i] = new int[aRows.Length];
}
for (int y = 0; y < aRows.Length; y++) {
for (int x = 0; x < aRows[y].Split(';').Length; x++) {
field.id [x] [y] = int.Parse(aRows[y].Split(';')[x]);
}
}
GameManager.log (JsonUtility.ToJson (field));
但是控制台只是说:
{}
目前正在使用的文件看起来像这样
5;5;5;5;5;5;5;5;5
5;5;5;5;5;5;5;5;5
5;5;5;5;5;5;5;5;5
5;5;5;5;5;5;5;5;5
5;5;5;5;5;5;5;5;5
5;5;5;5;5;5;5;5;5
我的方法有什么问题?请帮忙!我只是想不通。
答案 0 :(得分:1)
在内部,此方法使用Unity序列化程序;因此 传入的对象必须得到序列化程序的支持:它必须是a 使用MonoBehaviour,ScriptableObject或普通类/结构 应用了Serializable属性。您想要的字段类型 必须由序列化器支持;不支持的字段 将被忽略,私有字段,静态字段和字段也将被忽略 应用了NonSerialized属性。
所提供的对象(在您的情况下为Field对象)必须是MonoBehaviour,ScriptableObject或普通类(您的情况) 并且应用了Serializable属性。您需要使用该属性。
所以将属性添加到Field:
[Serializable]
public class Field{
public int[][] id;
public GameObject[][] gameObjectReference;
}
int [] []是可序列化的,应该让你的代码工作,但我不认为GameObject [] []是,而且我不太确定我们现在如何解决这个问题所以它应该被忽略。无论如何,首先尝试使用标记代码,并告诉我它是否有效。