AJS135 Ответов: 1

Сериализация в XML-документ с помощью цикла


Я пытаюсь сериализовать объект в xml-документ,но постоянно получаю эту ошибку, когда ввожу цикл.



"Необработанное исключение типа 'System.Исключение NullReferenceException' произошел в HotelReservations.dll"

public  class Inventory
    {
        StreamWriter sw;
        XmlSerializer serial;
        const string Inventory_Filename = @"..\..\roominventory.xml";

        public List<InventoryType> Inventoryttype { get; set; }


        public Inventory() { }
        public void CreateInvenList()
        { 
            Random rnd = new Random();
            int num = rnd.Next(1, 10);
            DateTime end = new DateTime();

            for( DateTime date = DateTime.Now; date < end; date.AddDays(3) )
          {
                foreach (InventoryType inventoryttype in Inventoryttype)
                {
                    List<InventoryType> Inventoryttype = new List<InventoryType>();

                    Inventoryttype.Add(new InventoryType(date, "123", "KB", num));

                }


            }


                serial = new XmlSerializer(Inventoryttype.GetType());
                sw = new StreamWriter(Inventory_Filename);
                serial.Serialize(sw, Inventoryttype);
                sw.Close();
            

        }
    }
}


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

я пытаюсь поместить код сериализации в цикл, но он просто ничего не делает. если я выну весь цикл и просто сериализую один объект, это сработает. но в тот момент, когда я помещаю его в цикл, возникает ошибка.

1 Ответов

Рейтинг:
8

David_Wimbley

У вас довольно беспорядок с вашим кодом, и он даже не должен компилироваться

public List <InventoryType> {get;set;}


Является ли свойство с тем же именем, что и локальная переменная

List<InventoryType> Inventoryttype = new List<InventoryType>();


Ваше нулевое исключение исходит из того факта, что вы пытаетесь сериализовать список, который еще не был объявлен.


serial = new XmlSerializer(Inventoryttype.GetType());
           sw = new StreamWriter(Inventory_Filename);
           serial.Serialize(sw, Inventoryttype);
           sw.Close();


Ваш.Метод Serialize пытается сериализовать свойство Inventoryttype, которое у вас не инициализировано и поэтому является нулевым, что объясняет ваше исключение null reference. На самом деле, глядя на ваш код, вы также пытаетесь добавить элементы в этот список, которые внутри вашего цикла for, the .Add, вероятно, является тем местом, где впервые возникает исключение.

Кроме того, не сериализации внутри цикла for, выполняется сериализация за пределами цикла for, не знаю, понимаешь ли ты, что.

Таким образом, ваше решение состоит в том, чтобы либо вызвать следующий код в верхней части вашего метода CreateInvenList

this.Inventoryttype = new List<InventoryType>();


Или просто измените свое свойство на поле

public List<InventoryType> Inventoryttype = new List<InventoryType>();