Десериализация внешне загруженных типов сборки - PullRequest
0 голосов
/ 08 сентября 2011

Я загружаю внешние библиотеки, используя

Assembly assembly = Assembly.LoadFile(assemblyPath);

foreach (Type assemblyType in assembly.GetTypes())
{
    if (assemblyType.IsSubclassOf(typeof(Chip.Chip)))
    {
        Chip.Chip chip = (Chip.Chip)Activator.CreateInstance(assemblyType);
        this[chip.Name] = new ChipAssembly()
        {
            Name = chip.Name,
            Description = chip.Description,
            Image = chip.Image,
            Type = assemblyType
        };
    }
}

Работает нормально. ChipAssembly - это помощник, который содержит необходимые поля + тип, который помогает мне создать его экземпляр, как только пользователь запросит его явно.

Теперь я использую двоичную сериализацию, чтобы сохранить ее в файл, включая тип. Когда я десериализую, он выдает SerializationException, говоря, что AssemblyNamespace.AssemblyClass не найден. Тем не менее, когда я устанавливаю тип в AssemblyClass при сериализации, он десериализуется правильно. Я чувствую, что я как-то назначаю неправильный сборочный тип, не так ли? :)

AssemblyNamespace.AssemblyClass является просто примером загруженной сборки.

1 Ответ

1 голос
/ 08 сентября 2011

Я подозреваю, что вам нужно загрузить сборку, содержащую этот тип, в CLR перед попыткой десериализации, если эта сборка статически не связана с исполняемой сборкой:

Assembly assembly = Assembly.LoadFile(assemblyPath);
// the assembly containing the type is now loaded into the CLR
// => deserialize now
...