【问题标题】:XMLSerializer create a new file after n lines (rows)XMLSerializer 在 n 行(行)之后创建一个新文件
【发布时间】:2020-06-19 22:15:51
【问题描述】:

我对 XMLSerializer 有疑问: 我有一个列表,想用 XMLSerializer 将列表的内容写入 XML。整个事情也很好。 但是在 n 行之后,我想用 XMLSerializer 将数据写入一个新的 XML,但是数据总是写入现有的 XML。

如何解决在 n 行之后创建了一个新的 XML 文件?

要序列化的代码:

 private void SaveLogFile()
    {
        bf = new BaseFunctions();
        try
        {
            XmlSerializer seri = new XmlSerializer(typeof(List<LVProperties>));
            TextWriter wr = new StreamWriter(FilePath);

            seri.Serialize(wr, FileWatcher.Data);
            wr.Close();
        }
        catch (Exception ex)
        {
            bf.app_Errorhandler(ex);
            return;
        }
    }

收集数据供Listview和datatable序列化的代码:

 public static List<LVProperties> Data = new List<LVProperties>();
    [STAThread]
    private void LogDataToLV()
    {
        ff = new FileFunctions();
        vlp = new LVProperties();
        bf = new BaseFunctions();

        bf.ReadAppInfos();

        _lvLogMe.Dispatcher.BeginInvoke(new Action(delegate ()
        {

            if (bf.osVersion.Major == 6 && bf.osVersion.Minor >= 2 || bf.osVersion.Major >= 10 && bf.osVersion.Minor >= 0)
            {
                LogMeUser = ff.getFileDetails(LogMePath, LogMeFile, FileFunctions.FileDetailInfo.Title); //Problem mit InvalidCastException!!
                LogMeSize = ff.getFileDetails(LogMePath, LogMeFile, FileFunctions.FileDetailInfo.Size);
            }
            else
            {
                LogMeUser = "not supported by OS";
                LogMeSize = "unknown";
            }
            _lvLogMe.Items.Add(new LVProperties { lv_LogMeDate = LogMeDate, lv_LogMeEvent = LogMeEvent, lv_LogMeFile = LogMeFile, lv_LogMePath = LogMePath, lv_LogMeUser = LogMeUser, lv_LogMeSize = LogMeSize });
            Data.Add(new LVProperties { lv_LogMeDate = LogMeDate, lv_LogMeEvent = LogMeEvent, lv_LogMeFile = LogMeFile, lv_LogMePath = LogMePath, lv_LogMeUser = LogMeUser, lv_LogMeSize = LogMeSize });
            _lvLogMe.SelectedIndex = _lvLogMe.Items.Count - 1;
            _tbLogCount.Text = _lvLogMe.Items.Count.ToString();
            if (VisualTreeHelper.GetChildrenCount(_lvLogMe) > 0)
            {
                Border border = (Border)VisualTreeHelper.GetChild(_lvLogMe, 0);
                ScrollViewer scrollViewer = (ScrollViewer)VisualTreeHelper.GetChild(border, 0);
                scrollViewer.ScrollToBottom();
            }
            _lvLogMe.UpdateLayout();
            _lvLogMe.DataContext = Data;
            LVRowCount = _lvLogMe.Items.Count;

            if (sXML.SaveLogAuto == "true")
            {
                if (LVRowCount == 10)
                {
                    SaveLogFile();
                }
            }

            if (_lvLogMe.Items.Count == 10)
            {
                _lvLogMe.Items.Clear();
                Data.Clear();
            }


        }));
    }

【问题讨论】:

  • 您也可以发布您的代码吗?

标签: c# xml xmlserializer


【解决方案1】:

XML 序列化程序的根不能有数组/列表。由于您有一个列表,因此您必须将列表包装在另一个类中。为了能够移动到 xml 中的某个位置,您必须使用 xml 阅读器。请参阅下面的代码:

   public class Test
    {
        BaseFunctions bf = new BaseFunctions();
        private void SaveLogFile()
        {
            bf = new BaseFunctions();
            Root root = new Root();
            MemoryStream stream = new MemoryStream();
            try
            {
                XmlSerializer seri = new XmlSerializer(typeof(Root);
                XmlWriterSettings settings = new XmlWriterSettings();
                settings.Indent = true;
                XmlWriter writer = XmlWriter.Create(stream, settings);

                seri.Serialize(writer, root);
                stream.Position = 0;

                XmlReader reader = XmlReader.Create(stream);

                reader.ReadToFollowing("Node");
            }
            catch(Exception ex)
            {
            }
        }
    }
    public class BaseFunctions
    {
    }
    public class Root
    {
        [XmlElement("Properties")]
        List<LVProperties> properties = new List<LVProperties>();
    }
    public class LVProperties
    {
    }
}

【讨论】:

  • 感谢您的回复。如果我有一点时间,我会尝试...
猜你喜欢
  • 1970-01-01
  • 2011-02-10
  • 2018-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-07
  • 1970-01-01
  • 2020-09-28
相关资源
最近更新 更多