我设法通过
JSON.net TypeNameHandling将自己变成了一个修复.我正在使用RavenDB存储一个JSON格式的对象,并将JSON.net序列化器的TypeNameHandling设置为true,以处理我已经存在的继承结构.
我需要更改我正在存储的文档的命名空间,所以现在当它被反序列化时,它会抛出错误“JSON中指定的错误解析”,因为对JSON文档中的类型的引用不再存在.
为了进行某种滚动迁移,是否有可能拦截Json反序列化?
谢谢,
好吧,想出来最后,这是非常简单的.您需要覆盖DefaultSerializationBinder,它负责从文档中创建.Net类型.由于我的json文档中有旧的命名空间,所以我需要拦截该类型的创建来返回正确的类型.我将一个简单的实现放在一起,这样就可以在创建JSON序列化程序时配置“迁移”.
原文链接:https://www.f2er.com/json/288443.htmlpublic class NamespaceMigrationSerializationBinder : DefaultSerializationBinder { private readonly INamespaceMigration[] _migrations; public NamespaceMigrationSerializationBinder(params INamespaceMigration[] migrations) { _migrations = migrations; } public override Type BindToType(string assemblyName,string typeName) { var migration = _migrations.SingleOrDefault(p => p.FromAssembly == assemblyName && p.FromType == typeName); if(migration != null) { return migration.ToType; } return base.BindToType(assemblyName,typeName); } }
界面在哪里
public interface INamespaceMigration { string FromAssembly { get; } string FromType { get; } Type ToType { get; } }