关于#XML#的问题,如何解决?

问题遇到的现象和发生背景

将系统中程序名称、发布者,安装时间,大小,版本都转化为XML文件

操作环境、软件版本等信息

Windows 10 专业工作站版,Visual Studio2022 .NetFramework4.7.2

尝试过的解决方法
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Management;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Serialization;
using System.Windows.Forms;

namespace Xml_Project
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private List programList = new List();

        public class ProgramInfo
        {
            public string Name { get; set; }
            public string Version { get; set; }
            public string Publisher { get; set; }
            public long Size { get; set; }
            public DateTime InstallDate { get; set; }
        }

        private void btnSaveToXml_Click(object sender, EventArgs e)
        {
            programList.Clear(); // 清空列表

            var programs = GetInstalledPrograms();
            foreach (var program in programs)
            {
                ProgramInfo info = new ProgramInfo();
                info.Name = program["DisplayName"].ToString();
                info.Publisher = program["Publisher"].ToString();
                info.InstallDate = ManagementDateTimeConverter.ToDateTime(program["InstallDate"].ToString());
                info.Size = Convert.ToInt64(program["EstimatedSize"]) / 1024 / 1024;
                info.Version = program["DisplayVersion"].ToString();
                programList.Add(info);
            }

        }

        private List GetInstalledPrograms()
        {
            List programs = new List();
            ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32Reg_AddRemovePrograms");
            foreach (ManagementObject program in searcher.Get())
            {
                programs.Add(program);
            }
            return programs;
        }

        private void saveFileDialog1_FileOk(object sender, CancelEventArgs e)
        {
            SaveFileDialog saveFileDialog = new SaveFileDialog();
            saveFileDialog.Filter = "XML文件|*.xml";
            saveFileDialog.Title = "保存文件";
            saveFileDialog.ShowDialog();
            if (saveFileDialog.FileName != "")
            {
                using (FileStream fs = (FileStream)saveFileDialog.OpenFile())
                {
                    XmlSerializer serializer = new XmlSerializer(typeof(List));
                    serializer.Serialize(fs, programList);
                    MessageBox.Show("保存成功!");
                }
            }
        }
    }
}
我想要达到的结果

只要能实现这个功能就好

用 XmlDocument 来生成啊

直接建一个对象,然后对象转为xml就行了,跟java的差不多吧

using System.IO;
using System.Xml.Serialization;
public static string ObjectToXml(object obj)
{
    XmlSerializer serializer = new XmlSerializer(obj.GetType());
    StringWriter writer = new StringWriter();
    serializer.Serialize(writer, obj);
    return writer.ToString();
}

以下内容部分参考ChatGPT模型:


你的代码中似乎缺少将XML文件保存到本地的代码,可以在 saveFileDialog1_FileOk 方法中实现。具体可以参考以下代码:

private void saveFileDialog1_FileOk(object sender, CancelEventArgs e)
{
    SaveFileDialog saveFileDialog = new SaveFileDialog();
    saveFileDialog.Filter = "XML文件|*.xml";
    saveFileDialog.Title = "保存文件";
    saveFileDialog.ShowDialog();
    if (saveFileDialog.FileName != "")
    {
        using (FileStream fs = (FileStream)saveFileDialog.OpenFile())
        {
            XmlSerializer serializer = new XmlSerializer(typeof(List<ProgramInfo>));
            serializer.Serialize(fs, programList);
            MessageBox.Show("保存成功!");
        }
    }
}

其中 saveFileDialog 是一个系统提供的用于选择保存文件路径的对话框,saveFileDialog.Filter 表示只允许保存 XML 文件,saveFileDialog.Title 表示在对话框中显示的标题。如果用户选择了保存路径,则可以使用 FileStream 将文件流打开,通过 XmlSerializerprogramList 对象序列化到文件流中,最后弹出一个提示框表示保存成功即可。


如果我的建议对您有帮助、请点击采纳、祝您生活愉快