В режиме MVVM при сериализации списка, в котором был удален элемент, в Xml. XML-файл имеет повторяющийся корневой конечный тег - PullRequest
0 голосов
/ 03 сентября 2018

После удаления элемента из списка 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>

Пожалуйста, помогите мне. Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...