.NET 4.x При сериализации xml файл заполняется неккоректно - C#
Формулировка задачи:
Всем привет. Пишу небольшую программку для личных нужд. Хранение данных предусматриваю в xml-файле. Сами данные представляют собой класс с атрибутом Serializable. При сериализации в файле происходят какие-то глюки
Сам класс:
При открытии программы происходит десериализация с биндингом на DataGrid
При работе с DataGrid (изменении данных) и при закрытии программы (окна) происходит сериализация в файл:
В общем - все по самым простым примерам. Однако, по неизвестным мне причинам, ибо не происходит исключений, файл записывается некорректно. Реально, с какими-то глюками. Типа так:
Пробовал погуглить проблему, но не находил подобных тем
Листинг программы
- [Serializable]
- public class Project : INotifyPropertyChanged
- {
- // Declare the event
- public event PropertyChangedEventHandler PropertyChanged;
- // Create the OnPropertyChanged method to raise the event
- protected void OnPropertyChanged(string name)
- {
- var handler = PropertyChanged;
- handler?.Invoke(this, new PropertyChangedEventArgs(name));
- }
- // id
- [XmlAttribute]
- public int Id { get; set; }
- // short name
- private string _shortName;
- [XmlAttribute]
- public string ShortName { get { return _shortName; } set { _shortName = value; OnPropertyChanged("ShortName"); } }
- // project type
- private string _projectType;
- [XmlAttribute]
- public string ProjectType { get { return _projectType; } set { _projectType = value; OnPropertyChanged("ProjectType"); } }
- // project name
- private string _projectName;
- [XmlAttribute]
- public string ProjectName { get { return _projectName; } set { _projectName = value; OnPropertyChanged("ProjectName"); } }
- // getting date
- private DateTime _gettingDate;
- [XmlAttribute]
- public DateTime GettingDate { get { return _gettingDate; } set { _gettingDate = value; OnPropertyChanged("GettingDate"); } }
- // start date
- private DateTime _startDate;
- [XmlAttribute]
- public DateTime StartDate { get { return _startDate; } set { _startDate = value; OnPropertyChanged("StartDate"); } }
- // end date
- private DateTime _endDate;
- [XmlAttribute]
- public DateTime EndDate { get { return _endDate; } set { _endDate = value; OnPropertyChanged("EndDate"); } }
- }
Листинг программы
- // on loaded
- private void MainWindow_OnLoaded(object sender, RoutedEventArgs e)
- {
- var formatter = new XmlSerializer(typeof(List<Project>));
- using (var fs = new FileStream(_xmlFile, FileMode.OpenOrCreate))
- {
- try
- {
- _projects = formatter.Deserialize(fs) as List<Project>;
- }
- catch (Exception)
- {
- _projects = new List<Project>();
- }
- }
- BindToDataGrid();
- }
Листинг программы
- private void SaveToFile()
- {
- try
- {
- var formatter = new XmlSerializer(typeof (List<Project>));
- using (var fs = new FileStream(_xmlFile, FileMode.OpenOrCreate))
- {
- formatter.Serialize(fs, _projects);
- }
- }
- catch (Exception exception)
- {
- MessageBox.Show(exception.Message);
- }
- }
Листинг программы
- <?xml version="1.0"?>
- <ArrayOfProject xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" /> <Project Id="1" ProjectType="ППТ и ПМТ" GettingDate="2016-10-04T11:23:15.6274011+03:00" StartDate="2016-10-04T11:23:15.6274011+03:00" EndDate="2016-10-04T11:23:15.6274011+03:00" />
- <Project Id="2" ProjectType="Ремонт" GettingDate="2016-10-04T11:24:04.2767522+03:00" StartDate="2016-10-04T11:24:04.2767522+03:00" EndDate="2016-10-04T11:24:04.2767522+03:00" />
- <Project Id="3" GettingDate="2016-10-05T00:00:00" StartDate="2016-10-04T11:24:12.7156322+03:00" EndDate="2016-10-04T11:24:12.7156322+03:00" />
- </ArrayOfProject>rrayOfProject>
Решение задачи: «.NET 4.x При сериализации xml файл заполняется неккоректно»
textual
Листинг программы
- </ArrayOfProject>rrayOfProject>
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д