C# 怎么序列化多个不同的对象在文件内,然后依次反序列化取出。在线等求指教

有三个对象,依次用二进制方式序列化到文件中,然后依次取出来。应该怎么做,第一个对象取出来成功了,但是取第二个对象的时候出现了错误:在分析完成之前遇到了流结尾 namespace ConsoleApplication5{ class Program { static void Main(string[] args) { Serialize(); Deserialize(); } static void Serialize() { A a = new A(); FileStream fs = new FileStream("DataFile.dat", FileMode.Open); BinaryWriter bw = new BinaryWriter(fs); MemoryStream ms = new MemoryStream(); // Construct a BinaryFormatter and use it to serialize the data to the stream. BinaryFormatter formatter = new BinaryFormatter(); try { formatter.Serialize(ms, a); byte[] tem = new byte[(int)ms.Length]; ms.Seek(0, SeekOrigin.Begin); ms.Read(tem, 0, (int)ms.Length); bw.Write(tem); ms.Close(); ms = new System.IO.MemoryStream(); string p = "123"; formatter.Serialize(ms, p); byte[] tem1 = new byte[(int)ms.Length]; ms.Seek(0, SeekOrigin.Begin); ms.Read(tem1, 0, (int)ms.Length); bw.Seek(0, SeekOrigin.End); bw.Write(tem1); bw.Flush(); bw.Close(); } catch (SerializationException e) { Console.WriteLine("Failed to serialize. Reason: " + e.Message); throw; } finally { //fs.Close(); } } static void Deserialize() { FileStream fs = new FileStream("DataFile.dat", FileMode.Open); BinaryFormatter formatter = new BinaryFormatter(); MemoryStream ms = new System.IO.MemoryStream(); byte[] a = new byte[145]; fs.Read(a, 0, 145); ms.Write(a, 0, 145); object x = formatter.Deserialize(ms); Console.WriteLine(x.GetType()); byte[] b = new byte[27]; fs.Seek(145, SeekOrigin.Begin); fs.Read(b,0,27); ms.Write(b, 0, 27); x = formatter.Deserialize(ms); Console.WriteLine(x.GetType()); fs.Close(); } } [Serializable] class A { string x = "122"; }}
大话西游666
浏览 1033回答 11
11回答

函数式编程

最简单的方式,把三个对象组合成一个大对象: public class Big {public A a;public B b;public C c;}

撒科打诨

这快设计到东西很多,很难几行或者几十行搞定。可以去用下NDatabase,或者看下那个的代码。主要就是解决这个问题的。

慕沐林林

这么复杂啊。。。。我觉得就是序列化成二进制然后存入文件,然后依次按长度取出

拉莫斯之舞

@大芝麻: 如果只是简单的存储  然后拿出来,并且就是几个几十个对象直接序列化反序列化,直接用json存储吧。

慕妹3146593

@imfunny:Json存储确实可行不过,存储的数据有能够直观的看出来内部信息。谢了

芜湖不芜

在序列化时,三个对象之间是如何分隔的?

Helenr

@大芝麻: 那问题可能出在读取流的操作时,在反序列化第2个对象时,流的读取指针已经跑到了流的结尾

宝慕林4294392

@dudu:  推荐阅读一个系列博文(重点是第5篇): C# 温故而知新:Stream篇(—) C# 温故而知新:Stream篇(二) C# 温故而知新:Stream篇(三) C# 温故而知新:Stream篇 (四) C# 温故而知新:Stream篇(五) C# 温故而知新:Stream篇(六)

慕勒3428872

@dudu: 如你所说就是指针位置不正确导致的

炎炎设计

做一个结构体,然后把结构体按序追加到文件中,C++存储数据的模式都这样,可以去看看大智慧的数据存储方式。
打开App,查看更多内容
随时随地看视频慕课网APP