亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

C# 怎么序列化多個不同的對象在文件內,然后依次反序列化取出。在線等求指教

C# 怎么序列化多個不同的對象在文件內,然后依次反序列化取出。在線等求指教

大話西游666 2018-12-06 17:31:22
有三個對象,依次用二進制方式序列化到文件中,然后依次取出來。應該怎么做,第一個對象取出來成功了,但是取第二個對象的時候出現了錯誤:在分析完成之前遇到了流結尾 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"; }}
查看完整描述

11 回答

?
函數式編程

TA貢獻1807條經驗 獲得超9個贊

最簡單的方式,把三個對象組合成一個大對象: public class Big {public A a;public B b;public C c;}
查看完整回答
反對 回復 2018-12-09
?
撒科打諢

TA貢獻1934條經驗 獲得超2個贊

這快設計到東西很多,很難幾行或者幾十行搞定??梢匀ビ孟翹Database,或者看下那個的代碼。主要就是解決這個問題的。
查看完整回答
反對 回復 2018-12-09
?
慕沐林林

TA貢獻2016條經驗 獲得超9個贊

這么復雜啊。。。。我覺得就是序列化成二進制然后存入文件,然后依次按長度取出
查看完整回答
反對 回復 2018-12-09
?
拉莫斯之舞

TA貢獻1820條經驗 獲得超10個贊

@大芝麻: 如果只是簡單的存儲 ?然后拿出來,并且就是幾個幾十個對象直接序列化反序列化,直接用json存儲吧。
查看完整回答
反對 回復 2018-12-09
?
慕妹3146593

TA貢獻1820條經驗 獲得超9個贊

@imfunny:Json存儲確實可行不過,存儲的數據有能夠直觀的看出來內部信息。謝了
查看完整回答
反對 回復 2018-12-09
?
蕪湖不蕪

TA貢獻1796條經驗 獲得超7個贊

在序列化時,三個對象之間是如何分隔的?
查看完整回答
反對 回復 2018-12-09
?
Helenr

TA貢獻1780條經驗 獲得超4個贊

@大芝麻: 那問題可能出在讀取流的操作時,在反序列化第2個對象時,流的讀取指針已經跑到了流的結尾
查看完整回答
反對 回復 2018-12-09
?
寶慕林4294392

TA貢獻2021條經驗 獲得超8個贊

@dudu:? 推薦閱讀一個系列博文(重點是第5篇): C# 溫故而知新:Stream篇(—) C# 溫故而知新:Stream篇(二) C# 溫故而知新:Stream篇(三) C# 溫故而知新:Stream篇 (四) C# 溫故而知新:Stream篇(五) C# 溫故而知新:Stream篇(六)
查看完整回答
反對 回復 2018-12-09
?
慕勒3428872

TA貢獻1848條經驗 獲得超6個贊

@dudu: 如你所說就是指針位置不正確導致的
查看完整回答
反對 回復 2018-12-09
?
炎炎設計

TA貢獻1808條經驗 獲得超4個贊

做一個結構體,然后把結構體按序追加到文件中,C++存儲數據的模式都這樣,可以去看看大智慧的數據存儲方式。
查看完整回答
反對 回復 2018-12-09
  • 11 回答
  • 0 關注
  • 1074 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號