Ошибка Stack overflow при работе с файловой системой, как исправить?

Здравствуйте, в моём проекте есть 2 файла отвечающие за работу с файловой системой, при запуске проекта вылетает ошибка, я не понимаю, как оно создаёт переполнение и вообще как это исправить

public class UserSettings
    {

        public string? name { get; set; }
        public string? nickname { get; set; }
        public string? first_key { get; set; }
        public string? second_key { get; set; }

        private string path_direcrory = @"\settings\user";
        private string path_fileSettings = @"\settings\user\user.json";

        public UserSettings()
        {
            DirectoryInfo dir = new DirectoryInfo(path_direcrory);

            if (!dir.Exists)
                dir.Create();


            if (!File.Exists(path_fileSettings))
            {
                Serializer();

                return;
            }

            Deserialize();
        }

        private void Serializer()
        {

            using (StreamWriter stream = new StreamWriter(path_fileSettings))
            {
                string obj = JsonSerializer.Serialize(this);
                stream.Write(obj);
            }
        }

        private void Deserialize()
            It needs optimization
        {
            string obj;

            using (StreamReader stream = File.OpenText(path_fileSettings))
            {
                obj = stream.ReadToEnd();
            }
#pragma warning disable CS8600 // Преобразование литерала, допускающего значение NULL или возможного значения NULL в тип, не допускающий значение NULL.
            UserSettings settings = JsonSerializer.Deserialize<UserSettings>(obj);
#pragma warning restore CS8600 // Преобразование литерала, допускающего значение NULL или возможного значения NULL в тип, не допускающий значение NULL.

            name = settings.name;
            nickname = settings.nickname;
            first_key = settings.first_key;
            second_key = settings.second_key;
        }


public class Settings
    {
        public UserSettings.UserSettings userSettings;

        public Settings() {

            DirectoryInfo dir = new DirectoryInfo("/settings");

            if (!dir.Exists)
                dir.Create();

            userSettings = new UserSettings.UserSettings();
        }
    }
  • Вопрос задан
  • 156 просмотров
Решения вопроса 2
@AAGR
Занимаюсь программированиям
Возможно дело в том что метод 'Deserialize()' повторно вызывает конструктор 'UserSettings()' попробуйте:
public UserSettings()
    {
        DirectoryInfo dir = new DirectoryInfo(path_directory);

        if (!dir.Exists)
        {
            dir.Create();
        }

        if (!File.Exists(path_fileSettings))
        {
            Serializer();
        }
        else
        {
            Deserialize();
        }
    }
Ответ написан
Комментировать
GavriKos
@GavriKos
string obj = JsonSerializer.Serialize(this);


Подозреваю дело вот в этом. Я бы разделил класс-контейнер данных, и класс-контроллер сериализации.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы