0

三部分问题。

我昨天发布了一个关于嵌套类等的问题(顺便说一句,很有帮助)。但是,现在我继续使用同一个程序,它利用 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; }
    }
}
4

2 回答 2

0

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

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 并进行处理。我希望这会有所帮助。

于 2014-11-17T15:17:08.580 回答
0

让 .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;
    }
}
于 2014-11-17T15:22:38.087 回答