Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Десериализация фейл 
V
    Опции темы
Riddik
Дата 7.7.2011, 17:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 598
Регистрация: 2.12.2006

Репутация: нет
Всего: нет



Вот структура, которую сериализуем / дсериализуем

Код

[Serializable]
public struct LevelData
{
    public int     objectCount;
    public int      fieldSize
    public int      typeCount;   
    public bool[]  cellActiveInfo;
}


Вот ф-ии:

Код

public static void SaveFile(string fileName, ref LevelData levelData)
{              
        FileStream fs = new FileStream(fileName, FileMode.Create, FileAccess.Write, FileShare.ReadWrite);
        BinaryFormatter bf = new BinaryFormatter();
        bf.Serialize(fs, levelData);
        fs.Close();
}

public static void LoadFile(string fileName, ref LevelData levelData)
{
        FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read);
        BinaryFormatter bf = new BinaryFormatter();
        levelData = (LevelData)bf.Deserialize(fs);
        fs.Close();      
 }


Serialization проходит нормально, а вот на Deserialize вот такая ругань:

FileNotFoundException: Could not load file or assembly 'efced4216a226be4aa3c75fdff6ef5e4' or one of its dependencies. The system cannot find the file specified.
System.AppDomain.Load (System.String assemblyString, System.Security.Policy.Evidence assemblySecurity, Boolean refonly)
System.AppDomain.Load (System.String assemblyString)
(wrapper remoting-invoke-with-check) System.AppDomain:Load (string)
System.Reflection.Assembly.Load (System.String assemblyString)
System.Runtime.Serialization.Formatters.Binary.ObjectReader.GetDeserializationType (Int64 assemblyId, System.String className)
System.Runtime.Serialization.Formatters.Binary.ObjectReader.ReadTypeMetadata (System.IO.BinaryReader reader, Boolean isRuntimeObject, Boolean hasTypeInfo)
System.Runtime.Serialization.Formatters.Binary.ObjectReader.ReadObjectInstance (System.IO.BinaryReader reader, Boolean isRuntimeObject, Boolean hasTypeInfo, System.Int64& objectId, System.Object& value, System.Runtime.Serialization.SerializationInfo& info)
System.Runtime.Serialization.Formatters.Binary.ObjectReader.ReadObject (BinaryElement element, System.IO.BinaryReader reader, System.Int64& objectId, System.Object& value, System.Runtime.Serialization.SerializationInfo& info)
System.Runtime.Serialization.Formatters.Binary.ObjectReader.ReadObject (BinaryElement element, System.IO.BinaryReader reader, System.Int64& objectId, System.Object& value, System.Runtime.Serialization.SerializationInfo& info)
System.Runtime.Serialization.Formatters.Binary.ObjectReader.ReadNextObject (BinaryElement element, System.IO.BinaryReader reader)
System.Runtime.Serialization.Formatters.Binary.ObjectReader.ReadObjectGraph (BinaryElement elem, System.IO.BinaryReader reader, Boolean readHeaders, System.Object& result, System.Runtime.Remoting.Messaging.Header[]& headers)
System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.NoCheckDeserialize (System.IO.Stream serializationStream, System.Runtime.Remoting.Messaging.HeaderHandler handler)
System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize (System.IO.Stream serializationStream)


Что я делаю не так, подскажите, пожалуйста?
PM MAIL   Вверх
jonie
Дата 7.7.2011, 20:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 22
Всего: 118



ну не может найти файл дересериализации... он по идее должен автоматом генерироваться... ну лучше, конечно, самому сгенить используя sgen утилиту (входит в поставку .net fx)


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Riddik
Дата 7.7.2011, 23:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 598
Регистрация: 2.12.2006

Репутация: нет
Всего: нет



Я на C# + .Net гость непостоянный, можете поподробнее, что оно ещё хочет? Как-нибудь как можно малой кровью, только бы кодом как0нибудь можно обойтись, без утилит?
Может массив мешает - размер заранее не известен, вот и разный typeid у структуры, нет, не может быть? Как оно тут у .Net...

Это сообщение отредактировал(а) Riddik - 7.7.2011, 23:35
PM MAIL   Вверх
WarHog
Дата 8.7.2011, 00:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 122
Регистрация: 20.10.2007
Где: Воронеж

Репутация: нет
Всего: 2



Riddik, судя по всему, у тебя Save и Load разнесены по разным проектам? Такое ощущение, что LevelData определена два раза - и для проекта с Save, и для проекта с Load - с одной и той же структурой. Если это так, то для бинарной сериализации нужно общая структура, например, вынесенная в отдельный проект.
--------------------
PM MAIL   Вверх
Riddik
Дата 8.7.2011, 10:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 598
Регистрация: 2.12.2006

Репутация: нет
Всего: нет



WarHog, всё в одном проекте, более того - структура в одном файле с этими двумя ф-ми.

Добавлено через 7 минут и 46 секунд
Добрый человек тут мне подсказал, что "после каждой перекомпиляции чего-нить в проекте, у вас меняется имя ассембли, которой принадлежит эта сохраняемая структура, поэтому загрузить её обратно становится невозможно."

PM MAIL   Вверх
jonie
Дата 8.7.2011, 10:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 22
Всего: 118



Цитата(Riddik @  8.7.2011,  11:29 Найти цитируемый пост)

Добрый человек тут мне подсказал, что "после каждой перекомпиляции чего-нить в проекте, у вас меняется имя ассембли, которой принадлежит эта сохраняемая структура, поэтому загрузить её обратно становится невозможно."

ну если у вас прописана версия то да. Версию поищите как определяете (обычно в файле AssemblyInfo.cs) - если там стоит нечто вроде 1.0.*.*)  то она меняется каждый раз при сборке.


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Riddik
Дата 8.7.2011, 10:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 598
Регистрация: 2.12.2006

Репутация: нет
Всего: нет



Все так и есть, если в одной и той же сборке, то всё работает.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0483 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.