c# - 如何使用 protobuf-net 或其他序列化程序序列化第 3 方类型?

标签 c# .net serialization protobuf-net binary-serialization

我有List<HtmlAgilityPack.HtmlNode>但是 protobuf-net 给我的错误是它没有契约(Contract)。当我没有来源时,如何为其指定契约(Contract)?它实际上说它无法推断类型,但我认为这是因为我没有使用它的属性,对吗?

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

编辑:错误信息是:

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

最佳答案

坦率地说,对于 HTML,我只是存储...html - 它有点预序列化!但是,要回答这个问题:

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

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

关于信息,默认 模型的意义在于:这就是Serializer.* 使用的内容。但是,如果您使用 TypeModel 实例执行序列化/反序列化,您可以为相同类型拥有多个不同配置的模型。

我不记得 HTML-agility-pack 的全部细节,但这些是通过 protobuf-net 为您的场景提供的主要选项。

关于c# - 如何使用 protobuf-net 或其他序列化程序序列化第 3 方类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7869516/

相关文章:

asp.net - ClientID模式如何工作?

java - 在 java webservice 和 asp.net 客户端 Web 应用程序之间发送的数据库对象的序列化

c# JSON 序列化使用值而不是属性名称

c# - .NET 用户设置 - DEBUG 和 RELEASE 模式不同

c# - 将 xml 反序列化为类,list<> 有问题

c# - 如何将 IntPtr 获取到结构?

c# - 在行搜索结果后更新 DataGridView

c# - 在c#中初始化多维对象数组

c# - 序列化和反序列化包含类键的字典

c# - 是否可以读取锁定文件?