Save and load system not working please help

I have no idea why but my save and load system (based on the one seen here) has stopped working. I ran a test with it when I first finished writing it but it’s stopped working for (probably a lot of) reasons which I can’t figure out, the problem is that it’s a logic error and I’m not getting much to go off, plus there’s a LOT of code involved. Here’s just the code involved with the primary saving and loading, if anyone asks for the other classes referenced I’ll send it, just please help.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class SettingAndValue : MonoBehaviour
{
    //Creates values that need to be saved in settings
    //Decided whether videos will loop
    public static bool Loop = true;

    //Creates values that will be saved between pages
    public static string[] ValueStringArray = TempValueHandler.ValueStringArray;
    public static int ValueInt = TempValueHandler.ValueInt;

    //Creates values that store tags
    public static List<string> A = TagHandler.A;
    public static List<string> B = TagHandler.B;
    public static List<string> C = TagHandler.C;
    public static List<string> D = TagHandler.D;
    public static List<string> E = TagHandler.E;
    public static List<string> F = TagHandler.F;
    public static List<string> G = TagHandler.G;
    public static List<string> H = TagHandler.H;
    public static List<string> I = TagHandler.I;
    public static List<string> J = TagHandler.J;

    //Creates values related to password protection
    public static List<string> Passwords = PasswordHandler.Passwords;
    public static List<string> PassProt = PasswordHandler.PassProt;
    public static Dictionary<string, string> PassKey = PasswordHandler.PassKey;
    public static List<string> PassUnlock = PasswordHandler.PassUnlock;

    //Creates values related to file sorting/searching
    public static Dictionary<string, List<string>> FileDictionary = SortingHandler.FileDictionary;



    public void SaveState(SettingAndValue saver)
    {
        SaveSystem.SaveGameData(saver);
    }

    public static void LoadSettings()
    {
        SaveData data = SaveSystem.LoadSave();

        Loop = data.Loop;

        Debug.Log("Settings Data Loaded");
    }

    public static void LoadTempValues()
    {
        SaveData data = SaveSystem.LoadSave();

        ValueStringArray = data.ValueStringArray;
        ValueInt = data.ValueInt;

        Debug.Log("TempValue Data Loaded");
    }

    public static void LoadTags()
    {
        SaveData data = SaveSystem.LoadSave();

        A = data.A;
        B = data.B;
        C = data.C;
        D = data.D;
        E = data.E;
        F = data.F;
        G = data.G;
        H = data.H;
        I = data.I;
        J = data.J;

        Debug.Log("Tag Data Loaded");
    }

    public static void LoadPasswordSettings()
    {
        SaveData data = SaveSystem.LoadSave();

        Passwords = data.Passwords;
        PassProt = data.PassProt;
        PassKey = data.PassKey;
        PassUnlock = data.PassUnlock;

        Debug.Log("Password Data Loaded");
    }

    public static void LoadSortSearch()
    {
        SaveData data = SaveSystem.LoadSave();

        FileDictionary = data.FileDictionary;

        Debug.Log("Sorting Data Loaded");
    }

    public void LoadAll()
    {
        LoadSettings();
        LoadTempValues();
        LoadTags();
        LoadPasswordSettings();
        LoadSortSearch();

        Debug.Log("All Data Loaded");
    }
}

It seems redundant to me to have the exact same data layout in multiple places - instead what you can do is keep an instance of the SaveData class in your SettingAndValue script directly (and even make it static!) then just pass that to the save function directly.

First up, lets keep a static instance of SaveData in the SettingAndValue class and just work directly with that;

 using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 
 public class SettingAndValue : MonoBehaviour
 {
     public static SaveData GlobalSaveData = new SaveData ();
 
     public void SaveState ()
     {
         // Send the save data directly
         SaveSystem.SaveGameData (GlobalSaveData);
     }
 
     public void LoadAll ()
     {
         // Just update our GlobalSaveData directly from the file
         GlobalSaveData = SaveSystem.LoadSave ();
         Debug.Log("All Data Loaded");
     }
 }

From there, we need to rework the SaveSystem script a bit to use the SaveData as a parameter rather than SettingAndValue;

 using UnityEngine;
 using System.IO;
 using System.Runtime.Serialization.Formatters.Binary;
 
 public static class SaveSystem
 {
     // Pass the SaveData in directly
     public static void SaveGameData (SaveData save)
     {
         BinaryFormatter formatter = new BinaryFormatter();
         string path = Application.persistentDataPath + "/testSave.qul";
         FileStream stream = new FileStream(path, FileMode.Create);
 
         // Use the SaveData directly instead of making a new one
         formatter.Serialize(stream, save);
         stream.Close();
     }
 
     public static SaveData LoadSave ()
     // ...
 }

And finally, we can just remove the SettingAndValue constructor from the SaveData class as it is now just a data holder - also move the field initializers from SettingAndValue in here so that the variables have data by default;

 using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 
 [System.Serializable]
 public class SaveData
 {
     //Creates values that need to be saved in settings
     //Decided whether videos will loop
     public bool Loop = true;

     //Creates values that will be saved between pages
     public string[] ValueStringArray = TempValueHandler.ValueStringArray;
     public int ValueInt = TempValueHandler.ValueInt;

     //Creates values that store tags
     public List<string> A = TagHandler.A;
     public List<string> B = TagHandler.B;
     public List<string> C = TagHandler.C;
     public List<string> D = TagHandler.D;
     public List<string> E = TagHandler.E;
     public List<string> F = TagHandler.F;
     public List<string> G = TagHandler.G;
     public List<string> H = TagHandler.H;
     public List<string> I = TagHandler.I;
     public List<string> J = TagHandler.J;

     //Creates values related to password protection
     public List<string> Passwords = PasswordHandler.Passwords;
     public List<string> PassProt = PasswordHandler.PassProt;
     public Dictionary<string, string> PassKey = PasswordHandler.PassKey;
     public List<string> PassUnlock = PasswordHandler.PassUnlock;

     //Creates values related to file sorting/searching
     public Dictionary<string, List<string>> FileDictionary = SortingHandler.FileDictionary;
 }

Now, if you wish to access the saved fields, you can access them via the GlobalSaveData variable;

List<string> tagsA = SettingAndValue.GlobalSaveData.A;