我正在尝试用 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