0

我正在构建一个小型应用程序,我需要将我的数据存储到文件中。我读了一些关于保存对象的内容。我以前用 Java 做过这个,但那是几年前的事了。然后我保存了对象的孔数组,我想知道我是否可以在 C# 中做同样的事情以及如何做到这一点?

我正在使用一个名为 Animals 的列表,并且我还对该类进行了序列化,因为这是此任务中的一个需求。如果我已经序列化了 Animal 类,那么我想我不需要将子类序列化为 Animal?

一些帮助是preciated,谢谢!

编辑:

嗨,阿吉安!我制作了一些测试代码来保存列表,我只是想知道我做得对吗?我还没有添加任何 Try/Catch 代码。当我应该打开文件并阅读列表时,列表会被整体加载吗?反馈很有价值!

filestream = new FileStream(filePath, FileMode.Create);
        BinaryFormatter b = new BinaryFormatter();
        b.Serialize(filestream, animals);
        filestream.Close();
4

3 回答 3

1

对象的序列化是一件很棒的事情。它允许您存储对象的状态,与其他系统共享对象,在业务层和应用程序的前端之间传递对象。

一般来说,总是说明你需要什么样的序列化:二进制、xml、json?两个系统相互通信的方式会影响选择。

你说你不需要xml序列化。不是吗?管理二进制序列化对象的日志记录、调试和跟踪非常困难。您不需要 XML?没关系,那么让我们使用自定义序列化器,但帮助自己避免二进制序列化。除非需要!!

无论如何,这里的msdn链接:

于 2012-07-26T14:58:23.627 回答
0

看起来您正在做一个简单的示例,在这种情况下使用可序列化可能很好,但是您很快就会发现使用它真的很痛苦,并且对标记为可序列化的类的任何更改都会使旧文件不可读。

这使得序列化适用于非常短暂的存储,例如 - 在步骤之间保持批处理程序的状态或通过网络传输数据。如果您实际上是在编写文件,则最好设计一种文件格式。

xml 是一种很好用的语言——它基本上是为输出树状结构而设计的,而且很容易添加,因为所有内容都是按名称而不是位置读取的。

如果你只有非常简单的数据,你可以设计一个文本格式;一些简单的选项是使用制表符或空格分隔。如果您有多态类型,您可能需要稍微考虑一下以获得适用于所有类型的数据结构,或者您可以拥有所有子类型字段,然后用“类型”条目区分它们,例如:

(空格分隔)
类型 NumberOfLegs NumberOfFins
Fish - 2
Badger 4 -
SeaDog 3.5 7

于 2012-07-26T09:22:58.903 回答
0

如果您的类仅包含可序列化类型,则可以将基类和所有子类标记为可序列化。这是通过 Serializable 属性完成的

于 2012-07-26T08:55:03.607 回答