gpt4 book ai didi

.net - DataContractJsonSerializer.ReadObject(流流): Can I read more than one object?

转载 作者:行者123 更新时间:2023-12-05 01:35:51 25 4
gpt4 key购买 nike

我正在使用 .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();

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

我试着这样读:

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 被设置为文件的末尾,我无法读取下一个对象。我收到错误消息“Expecting element 'root' from namespace...”

我做错了什么,还是我只需要创建一个聚合对象来序列化包含这两个对象?我查看了有关 ReadObject 的 MSDN 文档,了解它对 Stream 对象的影响,但该页面没有任何有值(value)的信息。

最佳答案

好吧,这很奇怪,但显然我只需要在每次调用 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);

关于.net - DataContractJsonSerializer.ReadObject(流流): Can I read more than one object?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9914660/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com