gpt4 book ai didi

c# - 有没有办法将 IReadOnlyCollection/IReadOnlyList 与 protobuf-net 一起使用

转载 作者:太空狗 更新时间:2023-10-30 01:34:28 25 4
gpt4 key购买 nike

我了解到,在处理集合时,protobuf-net 需要 GetEnumerator 进行序列化,需要一个带有 Add 的类型进行反序列化。

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

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

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<string> Children { get; set; }
public Sheep()
{
Children = new List<string>();
}
}

我得到一个异常(exception):

Unable to resolve a suitable Add method for System.Collections.Generic.IReadOnlyCollection`1[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]

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


编辑:我已经在项目的存储库中针对此功能打开了一个问题:Support IReadOnlyCollection/IReadOnlyList members

最佳答案

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

目前这个场景没有魔法;任何解决方案都需要更改库。

关于c# - 有没有办法将 IReadOnlyCollection<T>/IReadOnlyList<T> 与 protobuf-net 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30557636/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com