Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/40: Рейтинг темы: голосов - 40, средняя оценка - 4.88
0 / 0 / 1
Регистрация: 05.09.2015
Сообщений: 212
1

Ошибка в XML файле при десериализации

15.05.2016, 09:32. Показов 7698. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
когда пытюсь десериализовать файл , то выдаёт ошибку -
There is an error in XML document (8,5)
Подскажите, в чем может быть проблема.

XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<?xml version="1.0" encoding="windows-1251"?>
<ArrayOfStudent xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Student>
    <Name>Nikolai</Name>
    <Surname>Morozov</Surname>
    <Groupnumber>121</Groupnumber>
    <Isikukood>39494323943</Isikukood>          
  </Student>
  <Student>
    <Name>Maksim</Name>
    <Surname>Antonov</Surname>
    <Groupnumber>122</Groupnumber>
    <Isikukood>390943234943</Isikukood>         
  </Student>
  <Student>
    <Name>Anastasia</Name>
    <Surname>Erofeeva</Surname>
    <Groupnumber>123</Groupnumber>
    <Isikukood>386943234944</Isikukood>         
  </Student>
  <Student>
    <Name>Aleksandr</Name>
    <Surname>Alekseev</Surname>
    <Groupnumber>124</Groupnumber>
    <Isikukood>380943234943</Isikukood>         
  </Student>
  <Student>
    <Name>Dmitri</Name>
    <Surname>Mihailov</Surname>
    <Groupnumber>125</Groupnumber>
    <Isikukood>3809437634973</Isikukood>            
  </Student>
  <Student>
    <Name>Stepan</Name>
    <Surname>Manzurets</Surname>
    <Groupnumber>222</Groupnumber>
    <Isikukood>3899437634973</Isikukood>            
  </Student>
</ArrayOfStudent>
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.05.2016, 09:32
Ответы с готовыми решениями:

Ошибка при десериализации из Xml
Есть программа - записная книжка, записи сериализуются в Xml. Если программа запускается первый раз...

Потеря данных при xml десериализации
Всем привет! Столкнулся с проблемой потери данных при xml десериализации объектов. Ситуация...

Верификация файла .json и .xml при десериализации
Собственно проблема такая: нужно обработать импорт некорректного файла. Файлы содержат объекты...

При десериализации данных из xml файла выпадает исключение, где указывается, что в файле ошибка
Подскажите пожалуйста в чем ошибка и как ее исправить...) В приложении пока что две формы. Form2...

7
161 / 122 / 85
Регистрация: 16.10.2013
Сообщений: 1,738
15.05.2016, 09:46 2
eluzor, а где кот объекта который подлежит десериализации и каким образом производится десериализация?
0
0 / 0 / 1
Регистрация: 05.09.2015
Сообщений: 212
15.05.2016, 10:14  [ТС] 3
открываю файл при нажатии на кнопке

C#
1
2
3
4
5
6
        private void FileContent_Click(object sender, EventArgs e)
        {
            spisok = XmlFileSerializer.Open(@"C:\Users\admin\Documents\Visual Studio 2013\Projects\StudentGroup\StudentGroup\bin\Debug\IATI.xml");
 
            PopulateStudentListView();
        }
Добавлено через 39 секунд
метод PopulateStudentListView();

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
void PopulateStudentListView()
        {
            foreach (Student obj in spisok)         // idem po kazdomu objektu Students
            {
                ListViewItem lvi = new ListViewItem();
 
                foreach (PropertyInfo pi in obj.GetType().GetProperties())      // dostaju po poljam etogo klassa
                {
                    string str;
 
                    if (pi.Name == "Name")
                    {
                        str = pi.GetValue(obj).ToString();
                        lvi.Text = str;
                    }
                    else
                    {
                        str = pi.GetValue(obj).ToString();
                        lvi.SubItems.Add(str);
                    }
                }
                lvStudent.Items.Add(lvi);
            }
        }
Добавлено через 57 секунд
вот сам объект

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace StudentGroup
{
    [Serializable]
    public  class Student
    {
        public string Name { get; set; }
        public string Surname { get; set; }
        public int Groupnumber { get; set; }
        public int Isikukood { get; set; }
 
 
 
 
        public Student()
        {
 
        }
 
           public Student(string name, string surname, int groupnumber, int  isikukood)
            {
               this.Name = name;
               this.Surname = surname;
               this.Groupnumber = groupnumber;
               this.Isikukood = isikukood;
            }
 
 
        public override string ToString()
        {
            return string.Format("{0}\n{1}\n{2}\n{3}",Name,Surname,Groupnumber,Isikukood);
        }
    }
}
Добавлено через 3 минуты
XmlFileSerializer сделан как отдельный класс

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
using System.Windows.Forms;
 
using System.IO;
using System.Xml.Serialization;
 
namespace StudentGroup
{
    class XmlFileSerializer
    {
        static XmlSerializer xmls =
           new XmlSerializer(typeof(List<Student>));
 
 
        public static List<Student> Open(string fileName)
        {
            if (string.IsNullOrEmpty(fileName.Trim())) return null;
 
            List<Student> list = new List<Student>();
            try
            {
                StreamReader sr = new StreamReader(fileName, Encoding.Default);
 
                list = (List<Student>)xmls.Deserialize(sr);
 
                sr.Close();
            }
            catch (Exception exc)
            {
                MessageBox.Show(exc.Message);
            }
            return list;
        }
    }
}
0
8942 / 4854 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
15.05.2016, 13:26 4
Скорее всего проблема в свойстве Isikukood. Оно объявлено как int, но в записи гораздо больше. Объяви его как string
А вообще смотри InnerException у ошибки, спускаясь вниз по дереву ошибок, чтобы понять где ошибка возникла впервые
1
0 / 0 / 1
Регистрация: 05.09.2015
Сообщений: 212
22.05.2016, 08:44  [ТС] 5
доброго времени суток!
сного у меня возникла ошибка во время считывания XML файла. На этот раз There is an error in XML document (2,2).
Необходима ваша помощь друзья!

XML
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?xml version="1.0" encoding="utf-8"?>
<Students>
  <Student>
    <Name>Dmitrii</Name>
    <Surname>Malcev</Surname>
    <Groupnumber>121</Groupnumber>
    <Isikukood>77777777777</Isikukood>
  </Student>
  <Student>
    <Name>Anton</Name>
    <Surname>Gurov</Surname>
    <Groupnumber>121</Groupnumber>
    <Isikukood>11111111111</Isikukood>
  </Student>
</Students>

STUDENT
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
using System.Xml.Serialization;
 
namespace StudentGroup
{
    public  class Student
    {
        public string Name { get; set; }
        public string Surname { get; set; }
        public string Groupnumber { get; set; }
        public string Isikukood { get; set; }
 
 
 
 
        public Student()
        {
 
        }
 
        public Student(string name, string surname, string groupnumber, string isikukood)
            {
               this.Name = name;
               this.Surname = surname;
               this.Groupnumber = groupnumber;
               this.Isikukood = isikukood;
            }
 
 
        //public override string ToString()
        //{
        //    return string.Format("{0}\n{1}\n{2}\n{3}",Name,Surname,Groupnumber,Isikukood);
        //}
    }
}
class XmlFileSerializer
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
using System.Windows.Forms;
 
using System.IO;
using System.Xml.Serialization;
 
namespace StudentGroup
{
    class XmlFileSerializer
    {
        static XmlSerializer xmls =
           new XmlSerializer(typeof(List<Student>));
 
 
        public static List<Student> Open(string fileName)
        {
            if (string.IsNullOrEmpty(fileName.Trim())) return null;
 
            List<Student> list = new List<Student>();
            try
            {
                StreamReader sr = new StreamReader(fileName, Encoding.Default);
 
                list = (List<Student>)xmls.Deserialize(sr);
 
                sr.Close();
            }
            catch (Exception exc)
            {
                MessageBox.Show(exc.Message);
            }
            return list;
        }
    }
}
пытаюсь вывести всё в listview
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 void PopulateStudentListView()
        {
                foreach (Student obj in spisok)         // idem po kazdomu objektu Students
                {
                    ListViewItem lvi = new ListViewItem();
 
                    foreach (PropertyInfo pi in obj.GetType().GetProperties())    
                    {
                        string str;
 
                        if (pi.Name == "Name")
                        {
                            str = pi.GetValue(obj).ToString();
                            lvi.Text = str;
                        }
                        else
                        {
                            str = pi.GetValue(obj).ToString();
                            lvi.SubItems.Add(str);
                        }
                    }
                    lvStudent.Items.Add(lvi);
                }
            }
нажатие на кнопке для отображения содержимого
C#
1
2
3
4
5
6
        private void FileContent_Click(object sender, EventArgs e)
        {
            spisok = XmlFileSerializer.Open("IATI.XML");
 
            PopulateStudentListView();
        }
Добавлено через 22 часа 46 минут
никто не видит ошибок ?
0
8942 / 4854 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
22.05.2016, 09:52 6
Укажи пространства имён в xml как в первом соообщении было.
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?xml version="1.0" encoding="utf-8"?>
<Students  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Student>
    <Name>Dmitrii</Name>
    <Surname>Malcev</Surname>
    <Groupnumber>121</Groupnumber>
    <Isikukood>77777777777</Isikukood>
  </Student>
  <Student>
    <Name>Anton</Name>
    <Surname>Gurov</Surname>
    <Groupnumber>121</Groupnumber>
    <Isikukood>11111111111</Isikukood>
  </Student>
</Students>
Хотя, возможно, нужно ещё задавать имя корневого элемента
0
0 / 0 / 1
Регистрация: 05.09.2015
Сообщений: 212
22.05.2016, 10:22  [ТС] 7
поменял , но всё равно выдаёт ту же ошибку.
0
8942 / 4854 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
22.05.2016, 10:47 8
Лучший ответ Сообщение было отмечено eluzor как решение

Решение

Тогда точно, нужно указывать корневой элемент:
C#
1
2
3
4
5
6
using (var reader = new StreamReader("students.xml"))
{
    var root = new XmlRootAttribute("Students");//Говорим, что корневой элемент называется Students
    var serializer = new XmlSerializer(typeof(List<Student>), root);//Указываем корневой элемент сериализатору
    List<Student> students = (List<Student>)serializer.Deserialize(reader);
}
0
22.05.2016, 10:47
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.05.2016, 10:47
Помогаю со студенческими работами здесь

Ошибка десериализации xml в WCF
В структуру xml добавился один вложенный тег. библиотеку, отвечающую за сериализацию/десериализацию...

Как использовать xsd файлы при десериализации xml для получения значений элементов?
Всем привет. Для личных нужд по работе пишу программку для конвертирования xml, получаемых с сайта...

Ошибка при десериализации
Пробую считать XML документ. в try catch выдаёт ошибку - There is an Error in XML document (2,2)...

Ошибка при десериализации
Привожу код сериализации и отправки объекта: public void SendRezult(object rezult) { ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru