我正在使用Json.Net序列化一些應用程序數據。當然,應用程序規範稍有改變,我們需要重構一些業務對象數據。將先前的序列化數據遷移到我們的新數據格式有哪些可行的策略?在版本/格式之間遷移序列化的Json.NET文檔的策略
例如,假設我們已經orignally有一個業務對象,如:
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;}
}
我已經看着寫LeaseInstrument定製JsonConverter,但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
};
你能提供一些關於你的JSON字符串的例子嗎? – fhelwanger