protobuf-net 跨程序集边界[反]序列化

2023-12-25

我在一个程序集中有一个基类,在另一个程序集中有大量从基类继承的生成类。当尝试解析 subclassType(SerializerT.cs 的第 248 行)时,使用 protobuf-net (r282) 序列化基类型列表会失败,因为子类不在基类的程序集中。将类移到一起并不是首选选项,而且我可以传递 List 是相当重要的。

这是我标记的基类。包含的类型标记为ProtoMember(x)按要求。

[ProtoContract] 
[ProtoInclude(1,"SomeItemType")]
[ProtoInclude(2,"AnotherItemType")]
[ProtoInclude(190,"YetAnotherItemType")]
public abstract class BaseItem
{
}

附带说明一下,这是评估使用 protobuf-net 替换 BinaryFormatter 在桌面应用程序和 SOAP Web 服务之间移动数据的一部分。

我能做这种事吗?有没有更好的办法?我只是错过了一些明显的东西吗?一个单独的长期问题是我是否应该做一些稍微不同的事情来为最终迁移到 3.5 做准备?


也许是最简单的使用方法ProtoInclude是与typeof,因为这会自动为您处理很多细微差别:

[ProtoInclude(1, typeof(SomeItemType))]

或者,您可以只使用程序集限定名称,因此:

[ProtoInclude(1,"SomeItemType, SomeRandomAssembly")]

在一个涉及多个人的相当特殊的案例中AppDomains,我发现你也可以使用一些魔法AppDomain.TypeResolve事件,但应尽可能避免。我还对管道中的元数据层进行了彻底的重新设计,从而在运行时提供了更大的灵活性(而不是必须在编译时声明所有内容,这会导致上面的一些痛苦)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

protobuf-net 跨程序集边界[反]序列化 的相关文章

随机推荐