有没有办法在protobuf-net中使用IReadOnlyCollection / IReadOnlyList

我认为,在使用集合时,protobuf-net需要GetEnumerator进行序列化,并使用Add进行反序列化。

对于没有Add类型,您可以设置在反序列化之前执行的inheritance类型。 这适用于IEnumerableList

 [ProtoContract(ImplicitFields = ImplicitFields.AllPublic)] public class Sheep { public IEnumerable Children { get; set; } public Sheep() { Children = new List(); } } 

 var dolly = RuntimeTypeModel.Default.DeepClone(new Sheep { Children = new[] { "Bonnie", "Sally", "Rosie", "Lucy", "Darcy", "Cotton" } }); 

但是,当我对IReadOnlyCollection (或IReadOnlyList )执行相同操作时:

 [ProtoContract(ImplicitFields = ImplicitFields.AllPublic)] public class Sheep { public IReadOnlyCollection Children { get; set; } public Sheep() { Children = new List(); } } 

我得到一个例外:

无法为System.Collections.Generic.IReadOnlyCollection`1 [[System.String,mscorlib,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089]解析合适的Add方法

那么,有没有办法让protobuf-net处理成员IReadOnlyCollection / IReadOnlyList


编辑:我在项目的存储库中为此function打开了一个问题: 支持IReadOnlyCollection / IReadOnlyList成员

这里的主要问题是“合并”。 对于非合并(或基本上:启用列表替换),我们可能会硬编码具体的类型和策略,但是,合并没有明显的事情要做。

目前这种情况没有魔力; 任何解决方案都需要更改库。