如何使用protobuf-net或其他序列化器序列化第三方类型?

本文关键字:序列化 第三方 类型 其他 何使用 protobuf-net | 更新日期: 2023-09-27 18:12:14

我有List<HtmlAgilityPack.HtmlNode>,但protobuf-net给我的错误是它没有合同。当我没有它的来源时,我如何为它指定一个合同?它实际上说它不能推断类型但我猜这是因为我没有使用它的属性,对吧?

默认二进制序列化器也会报错,因为该类型没有标记为可序列化的。

编辑:错误信息是:

Type is not expected, and no contract can be inferred: HtmlAgilityPack.HtmlNode

如何使用protobuf-net或其他序列化器序列化第三方类型?

坦率地说,在HTML的情况下,我只是存储… html -它是预先序列化的!然而,要回答这个问题:

在protobuf-net v2中,您可以在运行时配置TypeModel,它允许您通过属性和其他一些技巧做任何事情(在v2中,如果没有指定其他内容,属性只是帮助引导模型)。因为你可以在运行时做所有这些,你不需要改变类型——因此可以将它应用到你控制之外的模型。默认的模型实例是RuntimeTypeModel。默认,您可以向模型添加类型,并单独配置每个MetaType(它映射到Type)。这允许你告诉它应用哪些成员(属性/字段)、子类型、回调等。

如果这变得太复杂,您还可以指定一个"代理",它允许您配置一个简单的DTO,并使用标准转换操作符(显式或隐式)在复杂模型和简单DTO模型之间进行更改。

对于info, 默认模型的意义是:这就是Serializer.*使用的。然而,如果您使用TypeModel实例来执行序列化/反序列化,您可以为相同的类型拥有多个不同配置的模型。

我不记得html - agile -pack的全部细节,但这些是通过protobuf-net的主要选项。

对于BSon,您可以为任何类指定自己的序列化器;请参阅http://www.mongodb.org/display/DOCS/CSharp +司机+序列化+教程# CSharpDriverSerializationTutorial-Writeacustomserializer

下面是一个使用它序列化c#动态变量的示例