我与.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