我有一个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
这到底是什么传达的?班级本身有一些方法吗?在其他情况下,这似乎并不重要。 我不理解它应该表达的信息。
有什么想法吗?
答案 0 :(得分:1)
基本上,在许多内部,项目的集合与项目非常不同。该库允许您使用项目的代理项,但是不允许您将代理项用于它作为列表/集合处理的任何内容...出于protobuf-net的目的,这意味着:
foreach
要求(通常,但不一定,通过实施IEnumerable[<T>]
Add(T)
附加项目的方法T
SkipListHandling
如果您的类型不应该像列表一样,那么请在SkipListHandling
上设置[ProtoContract]
...但是:不要指望它的行为类似于列表如果你这样做它将仅作为项目处理。