1
namespace Console_Serep
{
    class Program
    {
        static void Main()
        {
            ReadedReport json = File.Exists(Directory.GetCurrentDirectory()) ? JsonConvert.DeserializeObject<ReadedReport>(File.ReadAllText(Directory.GetCurrentDirectory())) : new ReadedReport();

            while (true)
            {
                switch (Console.ReadLine())
                {
                    case "/rep":
                        Console.WriteLine("Введите отчет в формате 00 00 00:00 00 00");
                        string rep = Console.ReadLine();
                        int id = json.Items == null ? 0 : json.Items.Length;
                        json.Items[id] = new Converter(rep).Report;
                        File.WriteAllText(Directory.GetCurrentDirectory(), JsonConvert.SerializeObject(json));
                        break;

                    default:
                        Console.WriteLine("Такой команды не предусмотренно, попробуйте ввести другую или проверить наличие опечаток");
                        break;
                }
            }
        }
    }

    class ReadedReport
    {
        public Report[] Items { get; set; }
    }
}

System.NullReferenceException: "Object reference not set to an instance of an object." - эта ошибка возникает на строке записи в файл.

Элементу массива json.Items[id] не присваивается значение объекта, типы данных массива и присваиваемого объекта совпадают. Подскажите, пожалуйста, в чем ошибка и как можно сделать иначе.

aepot
  • 49,560
kuschanow
  • 132
  • 10
  • Код и все сообщения об ошибках - текстом, пожалуйста. – Kromster Jul 15 '21 at 10:19
  • Directory.GetCurrentDirectory() это каталог, а имя файла где? File.WriteAllText("file.json", ...); – aepot Jul 15 '21 at 10:36
  • Покажите код класса ReadedReport, или скажите, какой тип у Items. – aepot Jul 15 '21 at 10:37
  • namespace Console_Serep { class ReadedReport { public Report[] Items { get; set; } } } – kuschanow Jul 15 '21 at 10:41
  • Converter тоже возвращает Report – kuschanow Jul 15 '21 at 10:41
  • Когда вы создаёте new ReadedReport, свойство Items равно null. Следовательно, тут json.Items[id] выбрасывается ваше исключение. – Alexander Petrov Jul 15 '21 at 16:00

1 Answers1

4
public Report[] Items { get; set; }

Массив имеет фиксированное количество элементов, которое задается при создании массива, например new Report[4]. В массив нельзя динамически добавлять элементы.

Используйте список вместо массива.

public List<Report> Items { get; set; }

Тогда код будет выглядеть вот так:

Console.WriteLine("Введите отчет в формате 00 00 00:00 00 00");
string rep = Console.ReadLine();
if (json.Items == null)
    json.Items = new List<Report>();
json.Items.Add(new Converter(rep).Report);

На работу с JSON сериализацией изменение типа этого свойства повлиять никак не должно.

И обязательно прочитайте вот это: Что такое NullReferenceException, и как мне исправить код?

aepot
  • 49,560