Сериализация и десериализация неизвестных наследуемых типов
-
22-08-2019 - |
Вопрос
Я начал рассматривать использование proto-buf .Net для своих нужд сериализации в медиабраузере.
В новой системе у нас есть структура сущностей, которую можно расширять с помощью плагинов.
Так, например, мы определяем класс Media в базовой библиотеке, а затем плагины могут определять подклассы, такие как Song.
Похоже, что proto-buf .Net должен знать обо всех подтипах нашего основного базового класса.
Поэтому я должен украсить свой базовый класс с помощью
[ProtoInclude(2, typeof(Song))]
Но ...на тот момент я ничего не знал о классе Song, который еще не существует.
Это снова к чертежной доске?Пытаюсь ли я сделать что-то, для чего библиотека не предназначена?
Решение
(от автора)
В текущей версии оно закреплено за типами, известными родительскому элементу.Однако это известное ограничение, поэтому существует план абстрагировать метамодель, чтобы ее можно было предоставлять отдельно во время выполнения, что в целом сравнимо с тем, как вы предоставляете такую информацию XmlSerializer
(по-прежнему потребуется способ предоставления тегов («2» выше) для каждого типа).
Я начал эту работу, но ожидаю, что потребуется несколько недель, чтобы она полностью заработала (рефакторинг также будет связан с некоторыми другими изменениями). чтобы помочь компактной структуре).
Так что решать вам...если вы сможете подождать несколько недель, я надеюсь, что что-то заработает.
Обратите внимание, что вам все равно понадобится какой-то способ создания (уникальных, повторяемых) тегов для всех различных подтипов — конфигурации и т. д.