.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>