Сериализация и десериализация неизвестных наследуемых типов - PullRequest
1 голос
/ 26 марта 2009

Я начал изучать использование proto-buf .Net для своих потребностей в сериализации для медиа-браузера.

В новой системе у нас есть структура сущностей, которая может быть расширена с помощью плагинов.

Так, например, мы определяем класс Media в базовой библиотеке, а затем подключаемые модули могут определять подклассы, такие как Song.

Кажется, что прото-buf .Net нужно знать обо всех подтипах нашего базового класса, определенного ядром.

Так что я должен украсить свой базовый класс

[ProtoInclude(2, typeof(Song))]

Но ... на тот момент я ничего не знал о классе Song, которого еще не существует.

Это обратно на чертежную доску? Я пытаюсь сделать что-то, для чего библиотека не предназначена?

1 Ответ

1 голос
/ 26 марта 2009

(от автора)

В текущем выпуске он зафиксирован для типов, известных родителю. Однако это известное ограничение, поэтому существует план абстрагирования метамодели с тем, чтобы ее можно было предоставлять отдельно во время выполнения, что в целом сопоставимо с тем, как вы предоставляете такую ​​информацию для XmlSerializer (для этого все равно потребуется способ предоставления теги («2» выше) для каждого типа).

Я начал эту работу, но я ожидаю, что потребуется несколько недель, чтобы она полностью заработала (рефактор также будет связан с некоторыми другими изменениями , чтобы помочь компактной структуре ).

Так что до вас ... если вы подождете несколько недель, я надеюсь, что что-нибудь сработает.

Обратите внимание, что вам все равно понадобится какой-то способ создания (уникальных, повторяемых) тегов для всех различных подтипов - конфигурации и т. Д.

...