// TestASettingsString and TestBSettingsString are byte[]
// TestASettings and TestBSettings are two objects to be saved在SettingsSaving中,TestASettings和TestBSettings被序列化为两个独立的字节数组,然后保存(在其他函数中)
我的问题是如何在加载保存的设置中分别从TestASettingsString和TestASettingsString恢复TestASettings和TestBSettings?
这就是我做formatter.Deserialize(流)的时候;
如何将两个完全不同的对象TestASettings和TestBSettings从formatter.Deserialize(流)中分离出来?
谢谢
private void SettingsSaving(object sender, CancelEventArgs e)
{
try
{
var stream = new MemoryStream();
var formatter = new BinaryFormatter();
formatter.Serialize(stream, TestASettings);
// TestASettingsString and TestBSettingsString are byte[]
TestASettingsString = stream.ToArray();
stream.Flush();
formatter.Serialize(stream, TestBSettings);
TestBSettingsString = stream.ToArray();
stream.Close();
}
catch (Exception ex)
{
Debug.WriteLine(ex);
}
}
private void LoadSavedSettings()
{
Reload();
// how to get TestASettings and TestBSettings from TestASettingsString and
// TestASettingsString seperately?
}发布于 2010-04-23 23:53:06
我怀疑问题的一部分在这里:
TestASettingsString = stream.ToArray();
stream.Flush();
formatter.Serialize(stream, TestBSettings);
TestBSettingsString = stream.ToArray(); 对于MemoryStream来说,Flush()是一个不可操作的东西。你的实际意思是:
TestASettingsString = stream.ToArray();
stream.SetLength(0);
formatter.Serialize(stream, TestBSettings);
TestBSettingsString = stream.ToArray(); 哪一项将重置流,将TestBSettingsString作为单独的数据块?目前,TestBSettingsString实际上同时包含TestASettings和TestBSettings。
完成后,应该只是一个反转的例子:
using(MemoryStream ms = new MemoryStream(TestASettingsString)) {
BinaryFormatter bf = new BinaryFormatter();
TestASettings = (WhateverType)bf.Deserialize(ms);
}
using(MemoryStream ms = new MemoryStream(TestBSettingsString)) {
BinaryFormatter bf = new BinaryFormatter();
TestBSettings = (WhateverOtherType)bf.Deserialize(ms);
}另请注意:我建议使用而不是使用BinaryFormatter来持久化任何离线的东西(磁盘、数据库等)。
发布于 2010-04-24 00:10:45
反序列化它们需要像这样的代码:
var ms = new MemoryStream(TestASettingsString);
var fmt = new BinaryFormatter();
TestASettings = (TestAClass)fmt.Deserialize(ms);其中TestAClass是TestASettings的类型。您需要在序列化代码中重置流,将位置设置回0。
https://stackoverflow.com/questions/2699850
复制相似问题