Это зависит от нескольких факторов.Во-первых, нам нужно прояснить три различных сценария: тип
- , известный статически как
Foo
- можно просто использовать универсальный тип API - , который не известен статически, но
Type
будет известен каким-либо образом во время выполнения - может использовать неуниверсальный тип API - , который вообще не известен
Я предполагаю, что вы имеете в виду третий вариант.Это наиболее проблематично, потому что protobuf не включает метаданные типа - и действительно те же данные могут быть десериализованы как любой совместимый тип: он не должен быть того же типа.
Если это последний случай, и данные уже сериализованы, то хороших вариантов не так много, кроме, может быть, чисто «расширяемого» типа (базовый тип Extensible
обеспечивает доступ во время выполнения к неизвестным полям и поддержку двусторонней поддержки),Тем не менее, он не может материализоваться в конкретный тип объекта, потому что он не знает, какой тип использовать.
Protobuf-net добавляет функцию «динамических типов», которая несколько упрощает это, но это толькоработа для новых данных - это требует определенной конфигурации.Честно говоря, я склонен советовать против этого - это сложно, а не "стандартный протобуф".