我正在创建一个简单的Winforms,它读取文本文件并进行一些解析,将其放入C#对象,然后由我的应用程序操作。
我想解析一次文件。然后离开一个星期,回来并将所有对象加载回我的应用程序。
我不想坚持使用数据库,因此希望有一些我可以使用的简单对象持久性框架。
答案 0 :(得分:3)
您在谈论serialization。
请查看DataContractSerializer
。如果您想要一个非XML文件,可以尝试DataContractJsonSerializer
。
您只需添加DataContract
和DataMember
属性即可告诉序列化程序如何管理序列化。
如果您的对象不会更改(新/旧/重命名的属性和可见性)并且您不想阅读序列化格式,则可以尝试BinaryFormatter
。
框架中有几个较旧的序列化器(XmlSerializer
,BinaryFormatter
等等),但对序列化格式的最佳控制将与上述相同。
答案 1 :(得分:2)
您可以使用应用程序设置或用户设置。使用可在项目属性下找到的向导非常简单。 here is the tutorial for it.
答案 2 :(得分:1)
您可以将它们序列化为XML文件。简单,快速,简单(除非有人破解文件)。
答案 3 :(得分: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
,则更好。
答案 4 :(得分:1)
存储对象状态的最简单的非DB方法是序列化。将您的类标记为Serializable或DataContract,然后使用BinaryFormatter(如果使用DataContract,则使用DataContractSerializer)将对象转换为可持久状态。然后可以将其保存到一个文件,您可以在应用程序启动时加载并以类似方式反序列化。请注意,类的成员(包括子类)必须以相同的方式进行序列化,并且您将丢失对非序列化元素(如指针和委托引用)的任何引用。
答案 5 :(得分:1)
您可以按照之前的建议使用序列化。
保存数据的好地方是Windows Local Data文件夹 -
Environment.SpecialFolder.LocalApplicationData
答案 6 :(得分:0)
数据库有什么问题?如果您不想拥有完整引擎及其设置和相关问题,也许您可以查看基于“文件”的数据库......
我的第一个难点是:
...
根据您要保留的对象的复杂程度,这可能是一个很好的解决方案。