У меня следующая иерархия -
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>