Ограничение протобуф-сети наследования "дерева" - PullRequest
5 голосов
/ 04 октября 2011

Продолжаю мой квест, чтобы согнуть protobuf-net по собственной воле ..

Я видел несколько вопросов вокруг SO о том, как динамически добавлять подклассы. чтобы сериализатор мог кодировать подкласс .., например this или this

Моя ситуация немного отличается, у меня есть базовый класс, который может быть разделен на подклассы в позднем ограниченном коде, и я хочу сериализовать его как класс BASE и полностью игнорировать поля / свойства подкласса.

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

Есть ли способ ограничить / запретить сериализацию подкласса?

В моем случае у меня есть список, в котором некоторые элементы списка являются DerivedClass.

Я хотел бы найти способ заставить серию protobuf-net сериализовать все как BaseClass, а также десериализовать в BaseClass ...

Я пытался заглянуть в код, но не нашел что-то слишком полезное.

1 Ответ

2 голосов
/ 04 октября 2011

Как правило, библиотека очень разборчива в том, чтобы определить производные классы и обращаться с ними иначе, чем с базовым классом. Единственное текущее исключение - это прокси-классы, в частности Entity Framework и NHibernate. Для решения tidy было бы целесообразно добавить какой-то переключатель «игнорировать подклассы». Но пока этого не существует, очень ленивый (и хакерский) подход будет состоять в мошенничестве с использованием существующей обработки для NHibernate, например:

namespace NHibernate.Proxy {
    interface INHibernateProxy {}
}
...
public class SomeDerivedType : BaseType, INHibernateProxy {}

это будет автоматически сериализовано согласно BaseType. Хотя он слегка обманывает.

...