使用protobuf-net中的代理项例外

时间:2015-11-24 17:52:57

标签: c# protobuf-net

我有一个DataCollection类,里面有一个嵌套的List。我正在尝试使用Surrogate类,因为我正在使用List>进入一个名单并代理Dto类本身。

我正在创建RuntimeTypeModel

_model = TypeModel.Create();
_model.Add(typeof(DataCollection), false).SetSurrogate(typeof(DataCollectionSurrogate));
_model.Compile();`

如果我编译模型,我会得到以下异常。

System.ArgumentExceptionRepeated data (a list, collection, etc) has inbuilt behaviour and cannot use a surrogate

这到底是什么传达的?班级本身有一些方法吗?在其他情况下,这似乎并不重要。 我不理解它应该表达的信息。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

基本上,在许多内部,项目的集合与项目非常不同。该库允许您使用项目的代理项,但是允许您将代理项用于它作为列表/集合处理的任何内容...出于protobuf-net的目的,这意味着:

  • 满足foreach要求(通常,但不一定,通过实施IEnumerable[<T>]
  • 有一个合适的Add(T)附加项目的方法
  • 可以识别(或明确指定)满足上述内容的T
  • 未明确标记为SkipListHandling

如果您的类型不应该像列表一样,那么请在SkipListHandling上设置[ProtoContract] ...但是:不要指望它的行为类似于列表如果你这样做它将仅作为项目处理。