Сериализация классов не выполняет сериализацию какого-либо кода, она просто сериализует данные и перезагружает эти данные в свойства класса, когда он десериализуется.Любые методы в классе такие же, как если бы вы только что создали экземпляр класса вручную.Попытка сериализации реального кода в базу данных, а затем каким-то образом скомпилировать его в метод во время выполнения - довольно странная и экзотическая вещь, и я изо всех сил пытаюсь понять, как она будет полезна в контексте тестирования.Если вы действительно хотите сохранить исходный код в базе данных, лучше сохранить его в виде текста, восстановить его в текстовый файл, а затем программно скомпилировать.Однако это то, для чего предназначены системы управления версиями и сборки, такие как Subversion и Nant, так что вы, возможно, будете изобретать велосипед заново.
В дополнение к вашему последнему комментарию, я думаю, что хорошим примером того, что вам нужно, будет Внедрение зависимости .Вы создаете интерфейс (например, ITester), который определяет контракт для теста, простой из которых - это метод теста, который возвращает bool для прохождения и неудачи.Вы пишете свою тестовую программу как обычно, но ваш тестовый метод использует класс, который реализует интерфейс ITest.Класс, который реализует интерфейс ITester, отвечает за конкретную реализацию теста и фактически выполняет тест.Остальная часть системы не заботится о том, что такое тест или как он проводится, она просто запускает метод теста, который возвращает true или false.
Таким образом, все, что вам нужно сделать, чтобы создать новую реализацию тестаэто создать новый класс, который реализует ITester.Если вам нужно изменить реализацию теста, вы просто измените конкретный класс и повторно развернете его.Если вы скомпилируете каждый класс тестера в свою собственную DLL, вы можете сохранить их в виде двоичных данных в базе данных.Затем вы можете извлечь их из базы данных и загрузить их динамически, используя System.Reflection.Assembly.Load.Обратите внимание, что это не сериализация, вы храните двоичный файл сборки в базе данных.
В результате вы получаете систему, которая решает, какой тест необходимо выполнить, запрашивает базу данных для соответствующего файла DLL, которыйможет запустить тестовый код, затем динамически загружать и выполнять DLL во время выполнения.