Ошибка при десериализации - C#
Формулировка задачи:
Пробую считать XML документ.
в try catch выдаёт ошибку - There is an Error in XML document (2,2)
что бы это могло значить ?
XmlSerializer formatter = new XmlSerializer(typeof(Student[]));
using (FileStream fs = new FileStream("Stud.studXml", FileMode.OpenOrCreate))
{
Student[] newstudent = (Student[])formatter.Deserialize(fs);
foreach (Student p in newstudent)
{
Console.WriteLine("Ид: {0}\n Фамилия: {1}\n Пол: {2}\nДень рожд.: {3}\n Курс: {4}\nГруппа: {5}\nСтипендия: {6} ",
p.Id, p.Surname, p.Gender, p.BirthDate, p.Course, p.Group, p.Scholarship);
Console.WriteLine("\n");
spisok1.Add(p);
Console.WriteLine("\n");
}
}
XmlSerializer formatter2 = new XmlSerializer(typeof(Marks[]));
using (FileStream fs2 = new FileStream("Stud.studXml", FileMode.OpenOrCreate))
{
try
{
Marks[] newMark = (Marks[])formatter2.Deserialize(fs2);
}
catch (Exception exc)
{
Console.WriteLine(exc.Message);
}
//foreach (Marks m in newMark)
//{
// Console.WriteLine("Предмет: {0}\n Оценка{1}", m.Subject, m.Level);
//}
}Решение задачи: «Ошибка при десериализации»
textual
Листинг программы
using System;
using System.Xml.Serialization;
using System.IO;
using System.Collections.Generic;
namespace XMLSerializator
{
class Program
{
static void Main(string[] args)
{
List<Student> students = new List<Student>();
#region Information about student
List<Mark> marks = new List<Mark>();
marks.Add(new Mark
{
Subject = "Мат. анализ",
Level = 5
});
marks.Add(new Mark
{
Subject = "Алгебра и геометрия",
Level = 4
});
students.Add(new Student
{
Id = 1,
Surname = "Иванов И.И.",
Gender = 'M',
BirthDate = "1991-03-12T00:00:00",
Course = 1,
Group = 2,
Scholarship = true,
Marks = marks
});
students.Add(new Student
{
Id = 1,
Surname = "Иванов И.И.",
Gender = 'M',
BirthDate = "1991-03-12T00:00:00",
Course = 1,
Group = 2,
Scholarship = true,
Marks = marks
});
#endregion
SaveAsXmlFormat(students, "studentList.xml");
List<Student> newList = LoadFromXmlFormat<List<Student>>("studentList.xml");
foreach (var item in newList)
Console.WriteLine(item.ToString());
Console.ReadLine();
}
static void SaveAsXmlFormat(object objGraph, string fileName)
{
XmlSerializer xmlFortmat = new XmlSerializer(typeof(List<Student>), new Type[] { typeof(List<Mark>) });
using (Stream fStream = new FileStream(fileName, FileMode.OpenOrCreate))
{
xmlFortmat.Serialize(fStream, objGraph);
}
Console.WriteLine("=> Saved in XML format!");
}
static T LoadFromXmlFormat<T>(string fileName) where T : new()
{
T obj = new T();
XmlSerializer xmlFortmat = new XmlSerializer(typeof(List<Student>), new Type[] { typeof(List<Mark>) });
using (Stream fStream = new FileStream(fileName, FileMode.OpenOrCreate))
{
obj = (T)xmlFortmat.Deserialize(fStream);
}
Console.WriteLine($"=> Load from XML file {fileName}!");
return obj;
}
}
[Serializable]
public class Student
{
public int Id { get; set; }
public string Surname { get; set; }
public char Gender { get; set; }
public string BirthDate { get; set; }
public int Course { get; set; }
public int Group { get; set; }
public bool Scholarship { get; set; }
public List<Mark> Marks = new List<Mark>();
public override string ToString()
{
return string.Format($"Ид: {Id}\n Фамилия: {Surname}\n Пол: {Gender}\nДень рожд.: {BirthDate}\n Курс: {Course}\nГруппа: {Group}\nСтипендия: {Scholarship}");
}
}
[Serializable]
public class Mark
{
public string Subject { get; set; }
public int Level { get; set; }
}
}