.data serialize and deserialize work in editor but not in build

Hello world!

First and foremost, please assume I’m a cavesman. I tried to make my script as simple as possible, because I’m quite the beginner at this, and I’d be ever-so-grateful for a simple, easily comprehensible answer.

So here’s the deal : I’ve created a custom class (ActorData) that I use to store all information pertaining to instantiatable characters in game (the player may create/edit/delete actors at will in a menu).

I then save the current actors in a list that I save in .data format. (tried XML, but couldn’t find a tutorial clear and explicit enough for me).

The whole process works flawlessly in the editor, but the list itself, when in a build, simply dosen’t get loaded at all! I honestly don’t get what’s happening.

Here’s the problematic code:

using UnityEngine;
using System.Collections;
using System;
using System.Runtime.Serialization.Formatters.Binary;
using System.IO;
using UnityEngine.UI;
using System.Collections.Generic;

public class ActorSaveAndLoad : MonoBehaviour {

	public void SaveActorData (List <ActorData> Data) {
		
		BinaryFormatter bf = new BinaryFormatter ();
		FileStream file = File.Create (Application.dataPath + "/Resources/Data/Object Information/Figurines/FigData.dat");

		bf.Serialize (file, Data);
		file.Close ();
	}

	public List<ActorData> LoadActorData () {

		List<ActorData> data;

		if (File.Exists (Application.dataPath + "/Resources/Data/Object Information/Figurines/FigData.dat")){
			BinaryFormatter bf = new BinaryFormatter ();
			FileStream file = File.Open (Application.dataPath + "/Resources/Data/Object Information/Figurines/FigData.dat", FileMode.Open);
			data = (List<ActorData>)bf.Deserialize (file) as List<ActorData>;
			file.Close ();

		} else {
			data = null;

		}

		if (GameObject.Find("TestText").gameObject && data != null) {
			GameObject.Find ("TestText").gameObject.GetComponent<Text> ().text = ("data contains "+data.Count+" objects");
		} else if (GameObject.Find("TestText").gameObject && data == null) {
			GameObject.Find ("TestText").gameObject.GetComponent<Text> ().text = ("data ain't here!");
		}

		return data;
	}

}

[Serializable]
public class ActorData {

	public string ActorName;
	public bool IsPlayer;
	public string PlayerName;
	public bool IsHostile;
	public bool UseQuickHP;
	public int MinHP;
	public int MaxHP;
	public string ActorNotes;
	public float ActorSize;
	public string FigModelName;
	public String PedModelName;

	public ActorData (string name, bool player, string pName, bool hostile, bool quickHP, int minHP, int maxHP, string notes, float size, string figName, string pedName) {
		ActorName = name;
		IsPlayer = player;
		if (IsPlayer) {
			PlayerName = pName;
		} else {
			PlayerName = null;
		}
		IsHostile = hostile;
		UseQuickHP = quickHP;
		MinHP = minHP;
		MaxHP = maxHP;
		ActorNotes = notes;
		ActorSize = size;
		FigModelName = figName;
		PedModelName = pedName;
	}

in a build, this simply throws a NullReferenceException whenever the list is called by another script.

Does anyone know how to fix this?

Nevermind, fixed it myself.

Changed the Datapath to :

Application.persistentDataPath + "FigData.dat"

and suddenly the build was able to find it.