После удаления элемента из списка logPaths , затем я пытаюсь сериализовать его в файл XML.
Вот определения классов. Список logPaths обернут в класс Configuration.
[Serializable]
public class Configuration
{
public List<DaioPath> logPaths { get; set; }
public List<DaioPath> versionFolders { get; set; }
}
public class DaioPath: ViewModelBase
{
[XmlIgnore]
public int ID { get; set; }
private string _path;
[XmlAttribute("src")]
public string Path
{
get { return _path; }
set
{
_path = value;
NotifyPropertyChanged(nameof(Path));
}
}
private string _searchPattern;
[XmlAttribute("searchPattern")]
public string SearchPattern
{
get { return _searchPattern; }
set
{
_searchPattern = value;
NotifyPropertyChanged(nameof(SearchPattern));
}
}
[XmlIgnore]
public bool IsFinished { get; set; } = false;
}
В ViewModel.cs. Я удалю выбранный элемент из LogPaths
private void delete()
{
if (SelectedItem != null)
{
LogPaths.Remove(SelectedItem);
XMLConfigHelper.DefaultInstance.collectLogsSettings.logPaths = LogPaths.ToList();
XMLConfigHelper.DefaultInstance.SaveParams();
}
}
Затем сериализовать список в файл XML.
public void SaveParams(string path)
{
FileInfo file = new FileInfo(path);
if (!file.Directory.Exists)
{
Directory.CreateDirectory(file.Directory.FullName);
}
try
{
using (FileStream fs = new FileStream(path, FileMode.OpenOrCreate, FileAccess.ReadWrite))
{
SaveParams(fs);
}
}
catch (IOException ex)
{
}
}
public void SaveParams(Stream stream)
{
XmlSerializer xs = new XmlSerializer(this.GetType());
xs.Serialize(stream, this);
}
Однако при попытке удалить элемент из списка LogPaths я получил неправильный XML-файл с дублирующимися конечными тегами.
Вы можете заметить, что конфигурация имеет два конечных тега. Я не знаю почему. И я обнаружил, что добавление элемента в список - это нормально.
<?xml version="1.0"?>
<Configuration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<logPaths>
<DaioPath src="c:\CH700" searchPattern="*.txt|*.ini" />
<DaioPath src="C:\CH700\Motion Buffer" searchPattern="*.BAS" />
<DaioPath src="C:\optsrvr\Machine1\report" />
</logPaths>
<versionFolders>
<DaioPath src="C:\Dataio\Tlwin\AlgDlls" searchPattern="*.dll" />
</versionFolders>
<ahIniFile>c:\ch700\winAh400.ini</ahIniFile>
<tlInstallPath>C:\Dataio\Tlwin</tlInstallPath>
<exportPath>C:\temp</exportPath>
</Configuration>
<exportPath>C:\temp</exportPath>
</Configuration>
Пожалуйста, помогите мне. Спасибо.