2

我正在制作一个简单的 Winforms,它读取文本文件并进行一些解析以将其放入 C# 对象中,然后由我的应用程序操作。

我想解析一次文件。然后离开一周,回来将所有对象加载回我的应用程序。

我不想持久化到数据库,因此希望有某种简单的对象持久性框架可以挂钩。

4

7 回答 7

3

你在谈论序列化

看看DataContractSerializer这个。如果你想要一个不是 XML 的文件,你可以试试DataContractJsonSerializer.

您只需添加DataContractDataMember属性来告诉序列化程序如何管理序列化。

如果您的对象不会更改(新/旧/重命名的属性和可见性)并且您不想阅读序列化格式,则可以尝试BinaryFormatter.


框架中有几个较旧的序列化器(XmlSerializerBinaryFormatter),但对序列化格式的最佳控制将是上面的)。

于 2011-01-31T17:12:26.013 回答
2

您可以使用应用程序设置或用户设置。使用可以在项目属性下找到的向导非常容易。这是它的教程。

于 2011-01-31T17:14:30.473 回答
1

您可以将它们序列化为 XML 文件。简单、快速和容易(除非有人破解了文件)。

于 2011-01-31T17:11:51.663 回答
1

可能最简单的方法是使用类将对象直接序列化到文件中BinaryFormatter。您需要确保将所有类型都标记为,[Serializable]但这种方法既快速又简单。

这是任意对象图的“读取”和“写入”方法的简单示例:

private void SerializeToFile(string fileName, object o)
{
    var binaryFormatter = new BinaryFormatter();
    using (var fileStream = new FileStream(fileName, FileMode.Create, FileAccess.Write, FileShare.None))
    {
        binaryFormatter.Serialize(fileStream, o);
    }
}

private object DeserializeFromFile(string fileName)
{
    var binaryFormatter = new BinaryFormatter();
    using (var fileStream = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.None))
    {
        return binaryFormatter.Deserialize(fileStream);
    }
}

其他方法包括 XmlSerialization (XmlSerializer类) - 如果您希望序列化的对象是人类可读或可编辑的,或者使用更新的DataContractSerializer.

于 2011-01-31T17:14:56.083 回答
1

存储对象状态的最简单的非 DB 方法是序列化。将您的类标记为 Serializable 或 DataContract,然后使用 BinaryFormatter(或 DataContractSerializer,如果您使用 DataContract)将对象转换为可持久状态。然后可以将其保存到一个文件中,您可以在应用程序启动时加载该文件并以类似的方式反序列化。请注意,类的成员(包括子类)必须以相同的方式可序列化,并且您将丢失对非序列化元素的任何引用,例如指针和委托引用。

于 2011-01-31T17:15:01.503 回答
1

您可以按照之前的建议使用序列化。

保存数据的好地方是 Windows 的 LocalData 文件夹 -

Environment.SpecialFolder.LocalApplicationData
于 2011-01-31T17:17:57.763 回答
0

数据库有什么问题?如果您不想拥有完整的引擎及其设置和相关问题,也许您可​​以查看基于“文件”的数据库......

我的第一个难题是:

  • SqlCompact
  • 访问数据库
  • SqlLite

...

根据要持久化的对象的复杂性,它可能是一个很好的解决方案。

于 2011-01-31T17:15:59.897 回答