有没有办法在protobuf-net中使用IReadOnlyCollection / IReadOnlyList
我认为,在使用集合时,protobuf-net需要GetEnumerator
进行序列化,并使用Add
进行反序列化。
对于没有Add
类型,您可以设置在反序列化之前执行的inheritance类型。 这适用于IEnumerable
和List
:
[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成员
这里的主要问题是“合并”。 对于非合并(或基本上:启用列表替换),我们可能会硬编码具体的类型和策略,但是,合并没有明显的事情要做。
目前这种情况没有魔力; 任何解决方案都需要更改库。