Атрибуты Protobuf с иерархией общих классов
У меня есть иерархия классов, которая выглядит следующим образом. Эти классы содержат много других деталей, которые я исключил. Это упрощение, чтобы сосредоточиться на аспекте сериализации этих классов.
[ProtoInclude(1, typeof(Query))]
[ProtoInclude(2, typeof(Query))]
[ProtoInclude(3, typeof(Query))]
[ProtoInclude(4, typeof(Query))]
[ProtoInclude(5, typeof(Query))]
abstract class Query
{
public string Result { get; set; }
}
[ProtoInclude(1, typeof(SpecialQuery)]
abstract class Query : Query
{
public new T Result { get; set; }
}
abstract class SpecialQuery : Query
{
public new string Result { get; set; }
}
У меня также есть около 150 автоматически генерируемых потомков универсальных запросов с большим разнообразием универсальных типов. Например: я
[ProtoContract]
class W : Query
{
}
[ProtoContract]
class X : Query
{
}
[ProtoContract]
class Y : Query
{
}
[ProtoContract]
class Z : SpecialQuery
{
}
Мы также автоматически сгенерировали [ProtoInclude] для всех этих типов. Например:
[ProtoInclude(1, typeof(W)]
[ProtoInclude(2, typeof(X)]
[ProtoInclude(3, typeof(Y)]
[ProtoInclude(4, typeof(Z)]
Вопрос в том, как мне развернуть эти 150 ProtoInclude? Я'Я пробовал различные комбинации, которые кажутся логичными, но я получаю различные исключения в зависимости от того, какие атрибуты присутствуют и где. Типы, которые действительно нуждаются в сериализации в вышеприведенном примере, будут W, X, Y, Z, только там 'около 150 из них.
Может ли protobuf-net иметь дело с чем-то вроде этого, или я должен попробовать какой-то другой вид сериализации?