У вас есть методы, которые вы можете использовать в C#, предоставляемом классом Any. Приведу пример.
Допустим, у нас есть следующий буфер протокола:
syntax "proto3"
import "google/protobuf/any.proto"
message Stock {
// Stock-specific data
}
message Currency {
// Currency-specific data
}
message ChangeNotification {
int32 id = 1;
google.protobuf.Any instrument = 2;
}
А в коде C#. Any класс предоставляет методы для установки поля, извлечения сообщение и проверка типа.
public void FormatChangeNotification(ChangeNotification change)
{
if (change.Instrument.Is(Stock.Descriptor))
{
FormatStock(change.Instrument.Unpack<Stock>());
}
else if (change.Instrument.Is(Currency.Descriptor))
{
FormatCurrency(change.Instrument.Unpack<Currency>());
}
else
{
throw new ArgumentException("Unknown instrument type");
}
}
Надеюсь, я помог вам понять, как вы можете реализовать это в своем собственном коде.