Кто-нибудь испытывал проблемы с сериализацией в 64-битной Windows 7 под Visual Studio 2008?
Я могу сериализовать свой объект перед выходом без ошибок, но когда я снова открываю объект, мои измененные данныене там.
Единственное различие, которое я знаю, в том, что я нахожусь на 64-битной Windows 7 (предыдущая была 32-битная Win XP).
Мой код ниже работает нормально, и ни один изисключения срабатывают.Тем не менее, если я изменю значение данных моего объекта и сериализую его, он не будет возвращаться обратно, когда я вернусь и десериализую эти же данные.
static void Settings(object objModel, StoreOption value) {
Model obj = objModel as Model;
if (obj == null) return;
if (!Directory.Exists(ExePath)) {
Directory.CreateDirectory(ExePath);
}
string cfgFile = Path.Combine(ExePath, _CFG_FILE);
bool ok = File.Exists(cfgFile);
switch (value) {
case StoreOption.Load:
if (ok) {
try {
using (Stream stream = File.Open(cfgFile, FileMode.Open, FileAccess.Read)) {
IFormatter formatter = new BinaryFormatter();
obj = formatter.Deserialize(stream) as Model;
}
} catch (SerializationException err) {
Console.WriteLine(err);
obj = null;
}
}
break;
case StoreOption.Save:
if (ok) {
try {
File.Delete(cfgFile);
} catch (Exception err) {
Console.WriteLine(err);
}
}
if (obj == null) {
obj = new Model();
}
using (Stream stream = File.Open(cfgFile, FileMode.Create, FileAccess.Write)) {
try {
IFormatter formatter = new BinaryFormatter();
formatter.Serialize(stream, obj);
} catch (SerializationException err) {
Console.WriteLine(err);
}
}
break;
}
}
Редактировать (06 /25/2010 @ 9 AM CST): Используя предложение jdehaan , я разделил метод static void Settings(object objModel, StoreOption value);
на следующие два метода.
Эта процедура все еще не в состоянии вспомнить изменения, которые я делаю в объекте.Я могу изменить данные, отправленные на Serialize
, и ошибок нет.Правильно ли сериализованы данные в моем файле?Я не знаю, потому что я не знаю, как интерпретировать данные в текстовом средстве просмотра, таком как Блокнот.Однако всякий раз, когда я вспоминаю сохраненные данные методом Deserialize
, возвращаемые данные НЕ являются тем, что я сохранил!
static Model Deserialize() {
Model obj;
if (!Directory.Exists(ExePath)) {
Directory.CreateDirectory(ExePath);
}
string cfgFile = Path.Combine(ExePath, _CFG_FILE);
bool ok = File.Exists(cfgFile);
if (ok) {
try {
using (Stream stream = File.Open(cfgFile, FileMode.Open, FileAccess.Read)) {
IFormatter formatter = new BinaryFormatter();
obj = formatter.Deserialize(stream) as Model;
}
} catch (SerializationException err) {
Console.WriteLine(err);
obj = null;
}
} else {
obj = null;
}
return obj;
}
static void Serialize(Model obj) {
if (obj == null) return;
if (!Directory.Exists(ExePath)) {
Directory.CreateDirectory(ExePath);
}
string cfgFile = Path.Combine(ExePath, _CFG_FILE);
bool ok = File.Exists(cfgFile);
if (ok) {
try {
File.Delete(cfgFile);
} catch (Exception err) {
Console.WriteLine(err);
}
}
if (obj == null) {
obj = new Model();
}
using (Stream stream = File.Open(cfgFile, FileMode.Create, FileAccess.Write)) {
try {
IFormatter formatter = new BinaryFormatter();
formatter.Serialize(stream, obj);
} catch (SerializationException err) {
Console.WriteLine(err);
}
}
}