Danny96 Ответов: 1

Несколько строк в формате JSON в одной директории


Здравствуйте, я (де)сериализую строки json в txt-файл. В моем коде объект "c2" успешно делает это там, где объект "c1" не удается сериализовать и десериализовать. Поскольку объект c1 терпит неудачу, его логические флаги не изменяются.

Я искал решения, я видел, как некоторые люди объединяют строки, а некоторые используют streamwrite, который я не использую в своем коде.

Что я уже пробовал:

это мой конструктор, где я выполняю десериализацию

public Form1()
        {
            InitializeComponent();
            input += ".txt";

            //default path + new filename
            path_combined = Path.Combine(root, input);


            if (!File.Exists(path_combined))
            {

                using (var stream = File.Create(path_combined))
                {
                    if (new FileInfo(path_combined).Length > 0)
                    {
                        //flag situation
                        string json2 = File.ReadAllText(path_combined);
                        FormatJson(json2);
                        c1 = JsonConvert.DeserializeObject<Class1>(json2);


                        //Method used or not
                        string json = File.ReadAllText(path_combined);
                        FormatJson(json);
                        c2 = JsonConvert.DeserializeObject<Class1>(json);
                    }
                }

            }
            else
            {
                //flag situation
                string json2 = File.ReadAllText(path_combined);
                FormatJson(json2);
                c1 = JsonConvert.DeserializeObject<Class1>(json2);


                //Method used or not
                string json = File.ReadAllText(path_combined);
                FormatJson(json);
                c2 = JsonConvert.DeserializeObject<Class1>(json);

            }

          

        }


Это часть сериализации, когда я нажимаю кнопку, она обновляет флаги.
private void Button1_Click(object sender, EventArgs e)
        {

            c1.flag = true;
            c1.flag2 = true;

            c2.M1 = true;

            string json = JsonConvert.SerializeObject(c1, Formatting.Indented);
            File.WriteAllText(path_combined, json);

            string json2 = JsonConvert.SerializeObject(c2, Formatting.Indented);
            File.WriteAllText(path_combined, json2);

        }

1 Ответов

Рейтинг:
10

OriginalGriff

Посмотри, что ты делаешь.:

string json = JsonConvert.SerializeObject(c1, Formatting.Indented);
File.WriteAllText(path_combined, json);

string json2 = JsonConvert.SerializeObject(c2, Formatting.Indented);
File.WriteAllText(path_combined, json2);
WriteAllText делает то, что он говорит: создает новый файл, содержащий именно ту строку, которую он передает. Если файл с таким же именем существует, он удаляется первым. Таким образом, файл будет содержать только один набор значений JSON для class2, данные class1 будут отброшены.


Danny96

спасибо

OriginalGriff

Всегда пожалуйста!