You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用C# WinForm(.NET Framework)开发支持自定义扩展名的数据库存读软件

方案推荐:用XML序列化实现自定义模板存储

对于你的WinForm(.NET Framework)+SQL Server项目,XML序列化完全适配你保存自定义.grwt模板的需求,理由和具体实现如下:

为什么选XML序列化?

  • 新手友好:.NET Framework自带XmlSerializer类,不需要自己写复杂的XML解析逻辑,几行代码就能完成序列化/反序列化操作。
  • 自定义扩展名无阻碍:序列化后的内容本质是XML文本,你只需要在保存文件时指定扩展名为.grwt即可,读取时也按这个扩展名过滤,完全不影响序列化流程。
  • 支持手动编辑:生成的.grwt文件是可读的XML格式,用记事本就能打开修改,符合你后续编辑模板的需求。
  • 适配WinForm场景:可以把用户在文本框录入的所有数据封装成一个实体类,直接序列化这个类的实例,不用手动拼接XML字符串。

具体实现步骤

1. 定义数据实体类

把需要保存的所有录入数据(比如各个文本框的内容)封装成一个公开类,示例:

public class DataTemplate
{
    // 对应你界面上的文本框字段,比如用户名、内容等
    public string UserName { get; set; }
    public string InputContent { get; set; }
    public DateTime CreateTime { get; set; }
}

注:XML序列化只需要类和属性是公开的,不需要额外加[Serializable]标记(加了也没问题)。

2. 保存模板(序列化)

在菜单栏的“保存”按钮点击事件中,把文本框的值赋值给实体类,再序列化保存为.grwt文件:

private void SaveTemplateToolStripMenuItem_Click(object sender, EventArgs e)
{
    var saveDialog = new SaveFileDialog();
    // 设置文件过滤器,只显示.grwt格式
    saveDialog.Filter = "模板文件 (*.grwt)|*.grwt";
    if (saveDialog.ShowDialog() != DialogResult.OK) return;

    // 把界面数据赋值给实体类
    var template = new DataTemplate
    {
        UserName = txtUserName.Text,
        InputContent = txtMainContent.Text,
        CreateTime = DateTime.Now
    };

    // 序列化并写入文件
    var serializer = new XmlSerializer(typeof(DataTemplate));
    using (var streamWriter = new StreamWriter(saveDialog.FileName))
    {
        serializer.Serialize(streamWriter, template);
    }
}

3. 打开模板(反序列化)

在菜单栏的“打开”按钮点击事件中,读取.grwt文件,反序列化为实体类,再把值回填到文本框:

private void OpenTemplateToolStripMenuItem_Click(object sender, EventArgs e)
{
    var openDialog = new OpenFileDialog();
    openDialog.Filter = "模板文件 (*.grwt)|*.grwt";
    if (openDialog.ShowDialog() != DialogResult.OK) return;

    // 反序列化文件内容
    var serializer = new XmlSerializer(typeof(DataTemplate));
    using (var streamReader = new StreamReader(openDialog.FileName))
    {
        var template = (DataTemplate)serializer.Deserialize(streamReader);
        // 把数据回填到界面控件
        txtUserName.Text = template.UserName;
        txtMainContent.Text = template.InputContent;
        // 可以显示创建时间等额外信息
        lblCreateTime.Text = $"创建时间:{template.CreateTime:yyyy-MM-dd HH:mm}";
    }
}

注意事项

  • 如果你的实体类包含复杂类型(比如List<string>、自定义子类),确保这些类型的属性也是公开的,必要时可以用[XmlElement]、[XmlArray]等特性调整XML的生成格式。
  • 如果你不需要手动编辑模板,也可以考虑二进制序列化,但二进制生成的.grwt文件是不可读的,不适合你的场景,所以优先选XML序列化。
  • 后续如果要把模板数据存入SQL Server,直接把序列化后的XML文本(或者实体类的属性值)存入数据库字段即可,非常灵活。

内容的提问来源于stack exchange,提问作者Ozzie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 04:52:53