使用 c# 中的序列化保存和打开自定义文件

本文关键字:自定义 文件 保存 序列化 使用 | 更新日期: 2023-09-27 18:30:36

由三部分组成的问题。

我昨天发布了一个问题,询问嵌套类等(顺便说一下,这很有帮助)。 但是,现在我继续使用同一个程序,该程序利用 MDI 来跟踪多个通用存储及其各自的库存,以便在从自定义 .inv 文件打开时进行实例化。 为此,Store 类和 Record 类都可以序列化以保存到所述自定义文件。

我不知道它是什么,但我只是不明白序列化。 我非常了解这个概念,只是不是实践,所以我要求一点耐心。

第 1 部分)我以原始形式创建了一个 saveFileDialog,旨在保存我放入其中的任何文件,文件扩展名为 .inv。 现在,问题是我究竟如何向它传递一个实例化的类以允许我以后打开文件(如下)的方式保存?

第 2 部分) 对于 openFileDialog,分为两部分。

首先,在上面保存后,我该如何阅读信息? 我的意思是,我想过使用具有重命名文件扩展名的文本文档来存储所有值,以便我可以一次读取一个存储名称和记录,但由于我不了解序列化,我不知道这是否是一个好主意。

其次,我将如何实例化我尝试打开的实例? 是像创建类的一个实例一样简单,每次打开新文档时,我都会清除所有内容,然后只添加打开的文件中的值,还是比这更复杂?

这些类的代码如下,因为这会让你了解我打算保存的内容。 如果您需要任何其他代码,请告诉我。

using System.Text;
using System.Threading.Tasks;
namespace Inventory
{
    [Serializable]
    class Store
    {
        public Store() { }
        public Store(string name) { }
        public string name { get; set; }
        public List<Record> Records { get; private set; }
    }
    [Serializable]
    class Record
    {
        public Record() { }
        public Record(int ID, int Quantity, double Price, string Name) { }
        public int id { get; set; }
        public int quantity { get; set; }
        public double price { get; set; }
        public string name { get; set; }
    }
}

使用 c# 中的序列化保存和打开自定义文件

您可以使用一个简单的帮助程序来序列化/反序列化字符串(我为您构建了一个作为示例):

public static class StoreHelper
{
    public static string Serialize(Store store)
    {
        var xmlSerializer = new XmlSerializer(typeof(Store));
        var textWriter = new StringWriter();
        xmlSerializer.Serialize(textWriter, store);
        return textWriter.ToString();
    }
    public static Store Deserialize(string xml)
    {
        var serializer = new XmlSerializer(typeof(Store));
        Store result;
        using (TextReader reader = new StringReader(xml))
        {
            result = (Store)serializer.Deserialize(reader);
        }
        return result;
    }
}

现在,在 MDI 应用中,你可以通过以下方式使用帮助程序管理商店 XML:

// Generate Store XML from Object.
var storeXml = StoreHelper.Serialize(myStore);
// Generate Store Object from XML.
var store = StoreHelper.Deserialize(storeXml);

现在,您可以从文件中读取/写入xml并对其进行处理。我希望这能有所帮助。

让 .NET 为你做:

private void Serialize(Store store, string path)
{
    var xmlSerializer = new XmlSerializer(typeof(Store));
    using (var streamWriter = new StreamWriter(path))
    {
        xmlSerializer.Serialize(streamWriter, store);
    }
}
private Store Deserialize(string path)
{
    var xmlSerializer = new XmlSerializer(typeof(Store));
    using (var streamReader = new StreamReader(path))
    {
        return xmlSerializer.Deserialize(streamReader) as Store;
    }
}