иерархия наследования и дженерики - PullRequest
0 голосов
/ 30 сентября 2018

У меня следующая иерархия -

ProtoBase

 SomeType :ProtoBase

 TypeCacheData<T> : ProtoBase

 ListCacheData<T> : TypedCacheData<List<T>>

, и я использую в коде

ListCacheData<SomeType> 

-

Я не был уверен, какие атрибуты наследования должныБыть включенным в последнюю версию для достижения этой цели -

TypeCacheData имеет свойство с именем Value of, имеющее тип T.

Я пробовал несколько вещей, но получил "ProtoBase" можетучаствовать только в одной иерархии наследования ..

Каков рекомендуемый способ обновления для этого?

Я видел это - ProtoBuf-Net ProtoInclude Подкласс универсального типа

но он довольно старый ...

Спасибо!

ОБНОВЛЕНИЕ - я в конце концов придумал следующее - что, кажется, работает -

Следует ли оно линиямрекомендуемый путь, или мое решение слишком сложное или, возможно, даже неправильное?

Спасибо !!

    [ProtoContract]
    [ProtoInclude(2, typeof(LiteAnswer))]
    [ProtoInclude(5, typeof(TypeCacheData<List<int>>))]
    [ProtoInclude(6, typeof(TypeCacheData<List<short>>))]
    [ProtoInclude(7, typeof(TypeCacheData<List<LiteAnswer>>))]
    public class ProtoBase
    {


    }

[ProtoContract]
[ProtoInclude(100, typeof(ListCacheData<LiteAnswer>))]
[ProtoInclude(101, typeof(ListCacheData<int>))]
[ProtoInclude(102, typeof(ListCacheData<short>))]
public class TypeCacheData<T> : ProtoBase { 
   // omitting class implementation to keep example concise

}


   [ProtoContract]
    public class ListCacheData<T> : TypeCacheData<List<T>>

При использовании вышеизложенного я могу правильно десериализовать / десериализовать isntances ofследующее -

ListCacheData<int> 
ListCacheData<short>
ListCacheData<LiteAnswer>
...