I can save and access an array of the custom data type, I can also access the double array of built in types such as int, but the double array of my custom type gives an " object reference not set to an instance of an object" error message in the line “bF.Serialize(file, data);”. although all three object references are instantiated.
I can easily work around this, but that would result in less clean code, I could for example make a second custom class which houses the double array, which resolves the problem. I, however would like to know why my code isn’t working as expected.
For clarification: Double array of int:
public int[] arr1;
public int[] arr2;
void Save() {
BinaryFormatter bF = new BinaryFormatter();
FileStream file = File.Open(Application.persistentDataPath + "/data.dat", FileMode.Create);
int[][] data = new int[2][];
data[0] = new int[] { 1, 2, 3 };
data[1] = new int[] { 4, 5 };
bF.Serialize(file, data);
file.Close();
}
void Load() {
BinaryFormatter bF = new BinaryFormatter();
FileStream file = File.Open(Application.persistentDataPath + "/data.dat", FileMode.Open);
int[][] data = (int[][])bF.Deserialize(file);
file.Close();
arr1 = data[0];
arr2 = data[1];
}
Works like a charm.
-
array of custom class:
void Save() { BinaryFormatter bF = new BinaryFormatter(); FileStream file = File.Open(Application.persistentDataPath + "/data.dat", FileMode.Create); CustomClass[] data = new CustomClass[]{new CustomClass(1), new CustomClass(2), new CustomClass(3)}; bF.Serialize(file, data); file.Close(); } void Load() { BinaryFormatter bF = new BinaryFormatter(); FileStream file = File.Open(Application.persistentDataPath + "/data.dat", FileMode.Open); CustomClass[] data = (CustomClass[])bF.Deserialize(file); file.Close(); arr1 = data; }
No problems here
-
Double array of custom class:
public CustomClass[] arr1; public CustomClass[] arr2; [System.Serializable] public class CustomClass { public CustomClass(int i) { integer = i; } public int integer; } void Save() { BinaryFormatter bF = new BinaryFormatter(); FileStream file = File.Open(Application.persistentDataPath + "/data.dat", FileMode.Create); CustomClass[][] data = new CustomClass[2][]; data [0] = new CustomClass[]{new CustomClass(1), new CustomClass(2), new CustomClass(3)}; data [1] = new CustomClass[]{new CustomClass(4), new CustomClass(5)}; bF.Serialize(file, data); file.Close(); } void Load() { BinaryFormatter bF = new BinaryFormatter(); FileStream file = File.Open(Application.persistentDataPath + "/data.dat", FileMode.Open); CustomClass[][] data = (CustomClass[][])bF.Deserialize(file); file.Close(); arr1 = data[0]; arr2 = data[1]; }
Won’t work…