| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Общие вопросы по .NET и C# > Глюк с с сериализацией. |
| Автор: Хоббит 20.2.2008, 21:04 | ||||||
| Словил интересный глюк. Приложение представляет собой комплекс логических игр. Каждая игры подключается в виде отдельной сборки. В каждой игре есть опции (класс опций). Опции сохраняются в файл и загружаются с помощью сериализации. То есть. Есть базовый Game, GameOptions и конкретные реализации
В сборке для игры.
При создание обьекта WordGame в конструкторе Game вызывается метод Read для загрузки опций
Так вот, если создать обычную формочку. Указать ссылку на сборку в Reflections. Создать клас игры и запустить, то все работает. Опции загружаются и сохраняются. Но в рабочем приложении все происходит следующим образом. Сборка подгружается через Assembly.LoadFile В ней ищутся классы наследованые от Game и создаётся объект класса по средством Activator.CreateInstance Так вот в том случае в указанном в коде месте возникает исключение с следющим сообщением Unable cast object of type 'ListWordGameOptios' to type 'ListWordGameOptions'. Не пойму в чем дело. |
| Автор: QryStaL 20.2.2008, 21:16 |
| 'ListWordGameOptios' to type 'ListWordGameOptions' Похоже на опечатку |
| Автор: Хоббит 21.2.2008, 11:00 |
| это я в ручную печатал. В ошибке то все верно написано. В общем он говорит, что не может переделать этот тип в этот же тип. |
| Автор: Хоббит 23.2.2008, 12:21 | ||
Вот простой пример.
Вот что выдает теперь. Unable to find assembly 'SerialiserAssembly, Version=1.0.0.0, Culture=neutral, P ublicKeyToken=null'. Я вот никак не пойму. Все вызовы выполняются в контексте загруженной сборки, почему он тип не видит? Что делать? Добавлено через 2 минуты и 44 секунды Вот простой пример. [code=csharp] namespace SerializedTest { class Program { static void Main(string[] args) { Assembly serializerAssembly = Assembly.LoadFile(Path.GetFullPath("SerializerAssembly.dll")); Type serializerDirectorType = serializerAssembly.GetType("SerializerAssembly.SerializerDirector"); try { Activator.CreateInstance(serializerDirectorType); } catch (Exception e) { Console.WriteLine(e.Message); } Console.ReadLine(); } } } namespace SerializerAssembly { public class SerializerDirector { #region Constructors public SerializerDirector() { this.Load(); } #endregion #region Methods public void Load() { try { string path = "file.txt"; TestClass testClass; Serializer serializer = new Serializer(); if (File.Exists(path) == false) { testClass = new TestClass(); testClass.IntField = 10; testClass.ColorField = Color.Beige; serializer.Serialize(path, testClass); } else { testClass = (TestClass)serializer.Deserialize(path); Добавлено через 2 минуты и 55 секунд Вот простой пример. [code=csharp] namespace SerializedTest { class Program { static void Main(string[] args) { Assembly serializerAssembly = Assembly.LoadFile(Path.GetFullPath("SerializerAssembly.dll")); Type serializerDirectorType = serializerAssembly.GetType("SerializerAssembly.SerializerDirector"); try { Activator.CreateInstance(serializerDirectorType); } catch (Exception e) { Console.WriteLine(e.Message); } Console.ReadLine(); } } } namespace SerializerAssembly { public class SerializerDirector { #region Constructors public SerializerDirector() { this.Load(); } #endregion #region Methods public void Load() { try { string path = "file.txt"; TestClass testClass; Serializer serializer = new Serializer(); if (File.Exists(path) == false) { testClass = new TestClass(); testClass.IntField = 10; testClass.ColorField = Color.Beige; serializer.Serialize(path, testClass); } else { testClass = (TestClass)serializer.Deserialize(path); |