我正在尝试用 protobuf-net 交换 BinaryFormatter 实现。用例是能够序列化和反序列化 NHibernate.Configuration 对象。“配置”对象很复杂,我们没有能力用属性来装饰它。我们将类型添加到运行时类型模型,但是对象没有被序列化(文件为 0 字节)。
首先,我将 Configuration 类型添加到运行时类型模型中:
model.Add(typeof(NHibernate.Cfg.Configuration), false)
那没有用,所以我添加了所有属性:
model.Add(typeof(NHibernate.Cfg.Configuration), false)
     .Add("ClassMappings",
          "CollectionMappings",
          "EntityNotFoundDelegate",
          "EventListeners",
          "Imports",
          "Interceptor",
          "NamedQueries",
          "NamedSQLQueries",
          "NamingStrategy",
          "Properties",
          "SqlFunctions",
          "SqlResultSetMappings");
这仍然不起作用,因为我现在收到以下错误:
没有为类型定义序列化程序:NHibernate.Mapping.PersistentClass
我需要将 NHibernate.Mapping.PersistentClass 添加到运行时类型模型吗?如果是这样,它是映射为子类型还是第二类型。编译项目会导致以下所有类型的类似错误:
RuntimeTypeModel.Default.Add(typeof(NHibernate.IInterceptor), false);
RuntimeTypeModel.Default.Add(typeof(NHibernate.Mapping.RootClass), false);
RuntimeTypeModel.Default.Add(typeof(NHibernate.Mapping.Collection), false);
RuntimeTypeModel.Default.Add(typeof(NHibernate.Cfg.INamingStrategy), false);
RuntimeTypeModel.Default.Add(typeof(NHibernate.Event.EventListeners), false);
RuntimeTypeModel.Default.Add(typeof(NHibernate.Mapping.PersistentClass), false);
RuntimeTypeModel.Default.Add(typeof(NHibernate.Proxy.IEntityNotFoundDelegate), false);
将这些类型添加到运行时类型模型不起作用。在编译过程中仍然会出现错误,最明显的是“未知子类型”,但是异常并没有告诉我对象是哪个类型的子类型。
有没有更简单的方法让 protobuf-net 序列化/反序列化未知复杂性的 3rd 方对象?
这个问题的动机是在以下用例中替换 BinaryFormatter:
Speed Up nHibernate Startup With Object Serialization