Проблема с записью в XML-файл

297
20 апреля 2017, 14:16

При завершении выкидывает ошибку:

process is terminated due to stackoverflowexception.

Файл создает, но он пуст. Компилятор говорит, что есть бесконечный цикл или рекурсия. Main пуст, только вызвал метод для считывания.

public void SaveGarage()
{
    XmlTextWriter b = new XmlTextWriter(@"D:\tmp1.xml", Encoding.Unicode);
    b.Formatting = Formatting.Indented;
    b.WriteStartDocument();
    b.WriteStartElement("garage");
    for (int i = 0; i < garage.Count; i++)
    {    
        b.WriteStartElement("car");
        b.WriteStartElement("name");
        b.WriteString(garage[i].Name);
        b.WriteEndElement();
        b.WriteStartElement("number");
        b.WriteString(garage[i].Number);
        b.WriteEndElement();
        b.WriteStartElement("Price");
        b.WriteString(garage[i].Price);
        b.WriteEndElement();
        b.WriteStartElement("model");
        b.WriteAttributeString("color", garage[i]._Model.color);
        b.WriteString(garage[i]._Model.name);
        b.WriteEndElement();
        b.WriteEndElement();       
    }
    b.WriteEndElement();
    b.Close();
}
Answer 1

Первое что бросается в глаза - это garage.Count. Значение переменной задаётся извне и неизвестно какое. Возможно проблема в нём.

Также, если в файл пишется мало (менее 100Мб), то посоветую использовать LINQ to XML для более наглядной записи в файл. К примеру:

var contacts =
    new XElement("Contacts",
        new XElement("Contact",
            new XElement("Name", "Patrick Hines"),
            new XElement("Phone", "206-555-0144",
                new XAttribute("Type", "Home")),
            new XElement("phone", "425-555-0145",
                new XAttribute("Type", "Work")),
            new XElement("Address",
                new XElement("Street1", "123 Main St"),
                new XElement("City", "Mercer Island"),
                new XElement("State", "WA"),
                new XElement("Postal", "68042")
            )
        )
    );
var doc = new XDocument(contacts);
doc.Save(@"D:\tmp1.xml");
READ ALSO
DBNull при добавлении записи в БД

DBNull при добавлении записи в БД

Я добавляю в БД запись, стоки беру из textboxЕсли textbox не заполнен, то нужно поставить значение NULL

149
Поиск в excel-файле

Поиск в excel-файле

Есть excel-файл, в нем два столбца А и ВИз программы на C# мне нужно организовать поиск значения в столбце А, и вернуть в программу рядом стоящее...

251
xmlns в коде для класса

xmlns в коде для класса

Есть две namespace, Допустим RootNSA и Root

206
Копирование файла?

Копирование файла?

https://pastebincom/bYKcyn8n

273