protobuf-net [de]跨越装配边界进行序列化

时间:2010-02-16 20:29:41

标签: c# serialization protobuf-net

我在一个程序集中有一个基类,在另一个程序集中有大量生成的类,它们继承自基类。在尝试解析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?

1 个答案:

答案 0 :(得分:1)

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

[ProtoInclude(1, typeof(SomeItemType))]

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

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

在涉及多个AppDomain的一个相当特殊的情况下,我发现你也可以在AppDomain.TypeResolve事件中运用一些魔法,但如果可能的话应该避免这种情况。我还在管道中对元数据层进行了彻底的重新处理,在运行时允许更多的灵活性(而不是在编译时声明everthing,这导致了上面的一些痛苦)。