Unity json api问题

时间:2017-04-18 12:28:38

标签: c# arrays json unity3d unity5

我目前正在尝试将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

我的方法有什么问题?请帮忙!我只是想不通。

1 个答案:

答案 0 :(得分:1)

来自documentation

  

在内部,此方法使用Unity序列化程序;因此   传入的对象必须得到序列化程序的支持:它必须是a   使用MonoBehaviour,ScriptableObject或普通类/结构   应用了Serializable属性。您想要的字段类型   必须由序列化器支持;不支持的字段   将被忽略,私有字段,静态字段和字段也将被忽略   应用了NonSerialized属性。

所提供的对象(在您的情况下为Field对象)必须是MonoBehaviour,ScriptableObject或普通类(您的情况) 并且应用了Serializable属性。您需要使用该属性。

所以将属性添加到Field:

[Serializable]
public class Field{
    public int[][] id;
    public GameObject[][] gameObjectReference;
}

int [] []是可序列化的,应该让你的代码工作,但我不认为GameObject [] []是,而且我不太确定我们现在如何解决这个问题所以它应该被忽略。无论如何,首先尝试使用标记代码,并告诉我它是否有效。