Ответ 1
Хорошо, понял. В конце концов, это было довольно прямолинейно. Вам необходимо переопределить DefaultSerializationBinder
, который отвечает за создание типа .Net из документа. Поскольку у моего json-документа есть старое пространство имён, мне нужно перехватить создание этого типа, чтобы вернуть правильный тип. Я собрал простую реализацию, которая позволит вам настроить "миграции" при создании сериализатора JSON.
public 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; }
}