我與.NET 4.0的工作,2010年VSDataContractJsonSerializer.ReadObject(Stream stream):我可以讀取多個對象嗎?
我寫這樣的文件:
DataContractJsonSerializer btlSerializer = new DataContractJsonSerializer(typeof(BrainTrackList));
FileStream fs = File.OpenWrite(m_fileName);
btlSerializer.WriteObject(fs, trackList);
DataContractJsonSerializer npcemSerializer = new DataContractJsonSerializer(typeof(NPCExistsModelData));
npcemSerializer.WriteObject(fs, npcemData);
fs.Close();
fs.Dispose();
這似乎給結果在文本文件我的期望。
我試着用這個來閱讀:
DataContractJsonSerializer btlSerializer = new DataContractJsonSerializer(typeof(BrainTrackList));
BrainTrackList listContainer = (BrainTrackList)btlSerializer.ReadObject(m_stream);
DataContractJsonSerializer npcemSerializer = new DataContractJsonSerializer(typeof(NPCExistsModelData));
NPCExistsModelData npceDataContainer = (NPCExistsModelData)npcemSerializer.ReadObject(m_stream);
其中m_stream是先前打開的Stream對象。 btlSerializer返回我期望的沒有問題的對象,但是然後m_stream.Position被設置爲文件的結尾,並且我無法讀取下一個對象。我得到一個錯誤「從命名空間預期元素'根'...」
我做錯了什麼,或者我只是需要創建一個聚合對象序列化,包含兩個對象?我查看了ReadObject上的MSDN文檔,看看它對Stream對象的影響,但該頁面上沒有任何值的信息。
我覺得很奇怪這不是任何地方JsonSerializer文檔提及。 – Almo 2012-03-28 20:43:01
我也不知道爲什麼頭寸必須重置爲零。謝謝。 – codingbiz 2015-04-12 03:16:11
該位置需要重置爲零,因爲從您剛剛寫入的流中讀取將從其當前位置開始,而不是從頭開始。這是與讀取/寫入流的框架中的其他方法一致的行爲。 – 2015-05-13 01:16:46