protobuf-net не устанавливает для возможности сериализации каждого сценария (особенно тех, в которых доминирует object
), точно так же, как XmlSerializer
и DataContractSerializer
имеют сценарии, которые онине могу моделировать.В частности, полное отсутствие метаданных в формате protobuf (часть того, почему они очень эффективны) означает, что только предназначено для потребления кодом, который заранее знает структуру данных - что являетсяневозможно, если слишком много object
.
Тем не менее, есть некоторая поддержка через DynamicType=true
, но в настоящее время она не будет включена для упомянутого вами сценария словаря.
В большинстве случаев, однако, это не совсем тот случай, когда данные могут быть чем угодно ;более типично существует конечное число ожидаемых типов данных.Когда это , то проблема object
может быть решена более чистым способом с использованием немного другой модели (в частности, неуниверсального базового типа, универсального подтипа и нескольких "включить "варианты".Как и в случае с большинством сериализаций, существуют сценарии, в которых может быть желательно иметь отдельную модель «DTO», которая выглядит ближе к выводу сериализации, чем к модели вашего домена.
Последнее замечание: GetProperties () /Подход Add () не является надежным, поскольку GetProperties () не гарантирует какой-либо конкретный порядок для членов;с протоколом protobuf-net, как вы показываете, порядок важен, так как это помогает определить ключи для использования.Даже если порядок был фиксированным (например, сортировка по алфавиту), учтите, что добавление члена может быть серьезным изменением.