setting highscores for multiple levels

what is the best way to set a high score for different scenes I have been working on playerprefs and binary formatter for days now I have tried to save the high score on my score text here

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

public class Score : MonoBehaviour
{
    public float score = 0.0f;
    public float highscore;
    public float difficultyLevel = 1;
    public float maxDifficultyLevel = 10;
    public float scoreToNextLevel = 10;
    public Scene scene;
    public bool isDead = false;

    public Text scoreText;
    public DeathMenu deathMenu;

    // Start is called before the first frame update
    void Start()
    {

    }

    // Update is called once per frame
    void Update()
    {
        if (isDead)
            return;

        if (score > highscore)
        {
            highscore = score;
            scoreText.text = highscore.ToString(); ;
        }

        if (score >= scoreToNextLevel)
            LevelUp();

        score += Time.deltaTime * difficultyLevel;
        scoreText.text = ((int)score).ToString();

    }

    public void AddScore(int addedScorePoints)
    {
        score += addedScorePoints;
    }

    void LevelUp()
    {
        if (difficultyLevel == maxDifficultyLevel)
            return;

        scoreToNextLevel *= 2;
        difficultyLevel++;

        GetComponent<playermotor>().SetSpeed(difficultyLevel);
    }

    public void Save()
    {
        if (Directory.Exists(Application.dataPath + "/Save data/(scene.name)/") == false)
            Directory.CreateDirectory(Application.dataPath + "/Save data/(scene.name)/");
        BinaryFormatter bf = new BinaryFormatter();
        FileStream file = File.Create(Application.dataPath + "/Save data/(scene.name)/Score.secure");
        ScoreData data = new ScoreData();
       
        data.highscore = this.highscore;

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

    public void OnDeath()
    {
        isDead = true;
        deathMenu.ToggleEndMenu(score);
    }

    [Serializable]
    class ScoreData
    {
        public float highscore;
    }
}

I need it to save a separate high score for each scene which i tried to do with scene.name and I am trying to load the score on my level select screen here

public class LevelSelect : MonoBehaviour
{

    public Text foresthscoreText;
    public Text deserthscoreText;
    public float score;
    public float highscore;

    // Start is called before the first frame update
    void Start()
    {

    }

    public void Load()
    {
        if (File.Exists(Application.dataPath + "/Save data/(scene.name)/Score.secure"))
        {
            BinaryFormatter bf = new BinaryFormatter();
            FileStream file = File.Open(Application.dataPath + "/Save data/(scene.name)/Score.secure", FileMode.Open);
            ScoreData data = (ScoreData)bf.Deserialize(file);
            file.Close();

            this.highscore = data.highscore;
            foresthscoreText.text = highscore.ToString();
        }
    }

I have been searching and trying on my own for days if anyone could help I would really appreciate it

This is a simpler example of the highscore system in a file. You can extend this.

[Serializable]
public class Score
{
    public string Name { get; set; }
    public int Result { get; set; }
}

[Serializable]
public class ScenesHS
{
    public string SceneName { get; set; }
    public int IndexScene { get; set; }
    public List<Score> HS { get; set; }
}

public class HighS
{
    List<ScenesHS> scenesHighScores = new List<ScenesHS>();

    //only to test my program
    public void PopulateScores()
    {
        string nameDict = "abcdefghijklmn";
        for (int scene = 0; scene < 10; scene++)
        {
            string name = "" + nameDict[scene];

            ScenesHS shs = new ScenesHS();
            shs.HS = new List<Score>();
            shs.SceneName = name;
            shs.IndexScene = scene;

            for (int highScores = 0; highScores < 5; highScores++)
            {
                shs.HS.Add(new Score { Name = name + highScores.ToString(), Result = highScores * 5 });
            }
            scenesHighScores.Add(shs);
        }
    }

    //from https://docs.microsoft.com/en-us/dotnet/api/system.runtime.serialization.formatters.binary.binaryformatter.deserialize?view=netframework-4.8
    public void Save()
    {
        FileStream fs = new FileStream("DataFile.dat", FileMode.Create);

        // Construct a BinaryFormatter and use it to serialize the data to the stream.
        BinaryFormatter formatter = new BinaryFormatter();
        try
        {
            formatter.Serialize(fs, scenesHighScores);
        }
        catch (SerializationException e)
        {
            Console.WriteLine("Failed to serialize. Reason: " + e.Message);
            throw;
        }
        finally
        {
            fs.Close();
        }
    }

    //from https://docs.microsoft.com/en-us/dotnet/api/system.runtime.serialization.formatters.binary.binaryformatter.deserialize?view=netframework-4.8
    public void Load()
    {
        scenesHighScores = null;

        // Open the file containing the data that you want to deserialize.
        FileStream fs = new FileStream("DataFile.dat", FileMode.Open);
        try
        {
            BinaryFormatter formatter = new BinaryFormatter();

            // Deserialize the hashtable from the file and
            // assign the reference to the local variable.
            scenesHighScores = (List<ScenesHS>)formatter.Deserialize(fs);
        }
        catch (SerializationException e)
        {
            Console.WriteLine("Failed to deserialize. Reason: " + e.Message);
            throw;
        }
        finally
        {
            fs.Close();
        }

        // To prove that the table deserialized correctly,
        // display the key/value pairs.
        foreach (var x in scenesHighScores)
        {
            Console.WriteLine($"SceneName: {x.SceneName}, IndexScene: {x.IndexScene}");
            foreach (var h in x.HS)
            {
                Console.WriteLine($"Name: {h.Name}, Score: {h.Result}");
            }
        }
    }
}

i put in what you said and i get this error when i switch public class score: monobehavior to public class HighS
error CS0246: The type or namespace name ‘SerializationException’ could not be found (are you missing a using directive or an assembly reference?)

and if i leave it the way it is i get this error
error CS0101: The namespace ‘’ already contains a definition for ‘Score’ because it has the same name as your line 2 in your code.

You need to use [Serialize]
You have another class with the name Score