.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>
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д