我有以下内容..
[ProtoContract, ProtoInclude(50, typeof(DateRange)), ProtoInclude(51, typeof(IntRange))]
public class Range<T> : IEquatable<Range<T>>, IEquatable<OpenRange<T>> where T: struct, IComparable<T>
{
[ProtoMember(1)]
public T Start { get; set; }
[ProtoMember(2)]
public T End { get; set; }
}
[ProtoContract]
public class DateRange : Range<DateTime>
{
}
[ProtoContract]
public class IntRange : Range<int>
{
}
当我尝试序列化DateRange时,我收到以下错误..
ProtoBuf.ProtoException:一个类型只能参与一个继承层次结构(DateRange) ----&GT; System.InvalidOperationException:类型只能参与一个继承层次结构
在源代码中花了一些时间之后我很确定问题是DateRange和IntRange技术上都有一个不同的父节点,因为Range&lt;日期时间&GT; !=范围&lt; INT取代。所以我真的不确定我们如何处理泛型。
答案 0 :(得分:1)
从Marc链接到的问题中获取详细信息并创建了这个:
RuntimeTypeModel.Default[typeof (Range<DateTime>)]
.AddSubType(50, typeof (DateRange));
RuntimeTypeModel.Default[typeof(Range<int>)]
.AddSubType(50, typeof(IntRange));
有点痛,但至少它有效!