protobuf-net抛出通用基类的异常

时间:2011-09-12 16:51:35

标签: protobuf-net

我有以下内容..

[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取代。所以我真的不确定我们如何处理泛型。

1 个答案:

答案 0 :(得分:1)

从Marc链接到的问题中获取详细信息并创建了这个:

RuntimeTypeModel.Default[typeof (Range<DateTime>)]
   .AddSubType(50, typeof (DateRange));
RuntimeTypeModel.Default[typeof(Range<int>)]
   .AddSubType(50, typeof(IntRange));

有点痛,但至少它有效!