如何用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
相关产品推荐
相关产品推荐

