Сериализация и десериализация неизвестных наследуемых типов

StackOverflow https://stackoverflow.com/questions/684622

Вопрос

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

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

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

Похоже, что proto-buf .Net должен знать обо всех подтипах нашего основного базового класса.

Поэтому я должен украсить свой базовый класс с помощью

[ProtoInclude(2, typeof(Song))]

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

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

Это было полезно?

Решение

(от автора)

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top