Сериализация и десериализация с помощью записи JSON в файл “.txt” проблема
РЕДАКТИРОВАТЬ:
Я исправляю предыдущие ошибки,
Я понимаю, что моя проблема с кодом связана с написанием пустого файла; когда я нажимаю свою кнопку, чтобы установить значения для записи файла;
Он говорит, что мой объект "С1" пуст.
System.NullReferenceException: 'Object reference not set to an instance of an object.'
на этой строке так как я нажимаю эту кнопку:
c1.flag = true
Мой файл пуст, Я знаю, кнопки сделаны, чтобы заполнить мой текст, когда я нажимаю их. Какое это имеет отношение к c1, это просто объект для обеспечения связи с моим другим классом.
-Я создаю новый файл с заданным путем, а затем записываю объект json в пустой txt.
Что я уже пробовал:
[Serializable] public partial class Form1 : Form { //FILENAME string input = Interaction.InputBox("Enter a serial number", "TEST", "Default", -1, -1); //DEFAULT PATH ROOT String root = @"C:\Users\Dell\source\repos\SaveReloadDeneme\SaveReloadDeneme\bin\Debug"; Class1 c1 = new Class1();//holds method's attribute flags Class1 c2 = new Class1(); //holds method flags whether the used or not string path_combined; public Form1() { InitializeComponent(); input += ".txt"; //default path + new filename path_combined = Path.Combine(root, input); if (!File.Exists(path_combined)) { File.Create(path_combined); } //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 static string FormatJson(string json) { dynamic parsedJson = JsonConvert.DeserializeObject(json); return JsonConvert.SerializeObject(parsedJson, Formatting.Indented); } // SET TRUE 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); }
[Serializable] class Class1 { [JsonProperty(PropertyName = "flag")] public bool flag { get; set; } [JsonProperty(PropertyName = "flag2")] public bool flag2 { get; set; } //indication whether the method is used or not [JsonProperty(PropertyName = "SET TRUE USED")] public bool M1 { get; set; } [JsonProperty(PropertyName = "SET FALSE USED")] public bool M2 { get; set; } public Class1() { } }
Richard MacCutchan
Вы создаете новый ArrayList
и List<string>
, а затем попробуйте использовать их содержимое. Но так как оба они являются новыми объектами, они ничего не содержат.
Danny96
Я упростил свой код, избавился от всех вещей arraylist, теперь это более понятно. Но у меня есть ошибка в той же строке, она говорит, что доступ запрещен, я не знаю, почему
Richard MacCutchan
Посмотрите на строку, которая была создана с полным путем к файлу, чтобы понять, почему она недопустима. Возможно, вы забыли добавить расширение .txt для имени файла, возможно, имя файла не существует, возможно, оно содержит недопустимый символ и т. д. Пожалуйста, попробуйте выполнить базовую отладку самостоятельно.
Danny96
Я обновил свой код, понял, что забыл поставить расширение .txt, кстати имя файла не существует, потому что я хочу создать новый файл с таким именем
Richard MacCutchan
Ну, вы не можете file.readalltext(path_combined);
на файл, который не существует.
Я бы посоветовал вам прекратить кодирование и начать с листа бумаги и записать в логическом порядке то, что вы пытаетесь сделать. В нынешнем виде это выглядит так, как будто вы просто бросаете заявления и надеетесь, что что-то сработает.
Danny96
да, вы правы, я проследил свой код, исправил свои ошибки, но у меня возникли трудности с (де)сериализацией, я обновил свой пост, я думаю, что теперь он более точен
Richard MacCutchan
Нет смысла говорить "Я думаю, что теперь это более точно" Вам нужно показать нам точный код, который вы запускаете, и точно объяснить, какая проблема у вас возникает и где она возникает. Если проблема связана с данными, которые вы обрабатываете, то нам также нужно увидеть эти данные.
Danny96
Я только что загрузил весь код и указал строку ошибки
Richard MacCutchan
Вы все еще пытаетесь десериализоваться из файла, который не содержит никаких данных. Вы не можете создать новый файл и сразу же ожидать, что прочитаете из него какую-то полезную информацию.
Я отсылаю вас к моему предыдущему предложению: перестаньте просто разбрасывать случайные строки кода и ожидать, что что-то сработает. Начните с самого начала:
1. получите имя файла.
2. Если файл существует, то попробуйте прочитать его содержимое.
2а. убедитесь, что вы действительно прочитали некоторые достоверные данные
3. Если файл не существует, то создайте новый файл.
3а. не пытайтесь читать из него, он будет пустым
Danny96
Я решил ее :))))) большое вам спасибо
BillWoodruff
жаль, что я не могу проголосовать за комментарии !
Richard MacCutchan
Ни один законопроект не волнует. Я все еще ценю ваши комментарии.