Стратегии миграции сериализованного документа Json.NET между версиями / форматами

Я использую Json.Net для сериализации некоторых данных приложения. Конечно, спецификации приложения немного изменились, и нам необходимо провести рефакторинг некоторых данных бизнес-объектов. Каковы некоторые жизнеспособные стратегии для миграции ранее сериализованных данных в наш новый формат данных?

Например, скажем, у нас изначально был такой бизнес-объект, как:

public class Owner
{
    public string Name {get;set;} 
}
public class LeaseInstrument
{
    public ObservableCollection<Owner> OriginalLessees {get;set;}
}

Мы сериализуем экземпляр LeaseInstrument в файл с Json.Net. Теперь мы изменим наши бизнес-объекты так, чтобы они выглядели так:

public class Owner
{
   public string Name {get;set;}
}
public class LeaseOwner
{
  public Owner Owner { get;set;}
  public string DocumentName {get;set;}
}
public class LeaseInstrument
{
    public ObservableCollection<LeaseOwner> OriginalLessees {get;set;}
}

Я рассмотрел написание пользовательского JsonConverter для LeaseInstrument, но метод ReadJson никогда не срабатывает ... вместо этого выдается исключение, прежде чем десериализатор достигнет этой точки:

Additional information: Type specified in JSON
'System.Collections.ObjectModel.ObservableCollection`1[[BreakoutLib.BO.Owner,
BreakoutLib, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]],
System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'
is not compatible with 'System.Collections.ObjectModel.ObservableCollection`1[[BreakoutLib.BO.LeaseOwner, BreakoutLib, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]], System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'. Path 'Is.$values[8].OriginalLessors.$type', line 3142, position 120.

Я имею в виду, без шуток, Json.Net, поэтому я пытаюсь запустить JsonConverter при десериализации этих объектов, поэтому я могу вручную обработать тот факт, что сериализованный тип не соответствует скомпилированному типу !!

Для чего это стоит, вот JsonSerializerSettings, которые мы используем:

var settings = new JsonSerializerSettings
    {
      PreserveReferencesHandling = PreserveReferencesHandling.Objects,
      ContractResolver = new WritablePropertiesOnlyResolver(),
      TypeNameHandling = TypeNameHandling.All,
      ObjectCreationHandling = ObjectCreationHandling.Reuse
    };

Ответы на вопрос(2)

Ваш ответ на вопрос