Честно говоря, в случае HTML я бы просто сохранил ... html - это своего рода предварительно сериализовано! Однако для ответа на вопрос:
В protobuf-net v2 вы можете настроить TypeModel во время выполнения, что позволяет делать все, что вы можете делать с помощью атрибутов и нескольких других приемов (в v2 атрибуты просто помогают управлять моделью, если ничего не указано). И поскольку вы можете делать все это во время выполнения, вам не нужно менять тип - и, следовательно, вы можете применять его к моделям вне вашего контроля. Экземпляр модели по умолчанию - RuntimeTypeModel.Default, и вы можете добавлять типы в модель и настраивать каждый MetaType индивидуально (который сопоставляется с типом). Это позволяет вам указать, какие элементы (свойства / поля), подтипы, обратные вызовы и т. Д. Применять.
Если это становится слишком сложным, вы также можете указать «суррогат», который позволяет настраивать простой DTO и использовать стандартный оператор преобразования (явный или неявный) для переключения между сложной моделью и простой моделью DTO.
Для информации, значение модели default по умолчанию: это то, что использует Serializer.*
. Однако если вы используете экземпляр TypeModel для выполнения сериализации / десериализации, у вас может быть несколько по-разному настроенных моделей для одних и тех же типов.
Я не могу вспомнить полную информацию о пакете HTML-agility, но это основные параметры, доступные для вашего сценария через protobuf-net.