DataContractJsonSerializer.ReadObject(Stream stream):我可以读取多个对象吗?

Alm*_*lmo 3 .net deserialization

我正在使用.NET 4.0,VS 2010.

我写了这样一个文件:

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();
Run Code Online (Sandbox Code Playgroud)

这似乎在我期望的文本文件中给出结果.

我尝试用这个来读它:

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);
Run Code Online (Sandbox Code Playgroud)

其中m_stream是以前打开的Stream对象.btlSerializer返回我期望的对象没有问题,但是m_stream.Position设置为文件的末尾,我无法读取下一个对象.我从命名空间中得到一个错误"Expecting element'root'..."

我做错了什么,或者我只是需要创建一个聚合对象来序列化包含两个对象?我检查了ReadObject上的MSDN文档,看看它对Stream对象的影响,但该页面上没有任何有价值的信息.

Alm*_*lmo 6

好吧,这很奇怪,但显然我只需要在每次调用ReadObject之前将流的位置设置回到开头.除了我想要读取的对象类型之外,它足够聪明地忽略文件中的所有内容.

这样可行:

DataContractJsonSerializer btlSerializer = new DataContractJsonSerializer(typeof(BrainTrackList));
BrainTrackList listContainer = (BrainTrackList)btlSerializer.ReadObject(m_stream);

m_stream.Position = 0;

DataContractJsonSerializer npcemSerializer = new DataContractJsonSerializer(typeof(NPCExistsModelData));
NPCExistsModelData npceDataContainer = (NPCExistsModelData)npcemSerializer.ReadObject(m_stream);
Run Code Online (Sandbox Code Playgroud)