Мы нашли решение этой проблемы:
Мы перешли с DataContractJsonSerializer на JSON.Net.Проблема теперь заключалась в том, что JSON.Net сериализуется с другими соглашениями об именах, поэтому старая сериализация данных в базе данных не может быть десериализована.DataContractJsonSerializer использует «_propertyname», а JSON.Net использует «propertyname».
Но, к счастью, сериализатор JSON.Net позволил нам перезаписать Naming Generation небольшим классом:
Public Class UnderscorePropertyNamesContractResolver
Inherits Newtonsoft.Json.Serialization.DefaultContractResolver
Protected Overrides Function ResolvePropertyName(propertyName As String) As String
Return MyBase.ResolvePropertyName("_" + propertyName)
End Function
End Class
Который затем можно было использовать, это было со старыми данными JSON:
Dim Setting = New JsonSerializerSettings
Setting.ContractResolver = New UnderscorePropertyNamesContractResolver
return JsonConvert.DeserializeObject(Of T)(serialized, Setting)
, и выполните Seralisation с этим:
Dim Setting = New JsonSerializerSettings
Setting.ContractResolver = New UnderscorePropertyNamesContractResolver
return JsonConvert.SerializeObject(obj, Formatting.Indented, Setting)
Теперь у нас есть более отказоустойчивая сериализация JSON и мы можемдобавьте свойства в наши классы со старыми данными JSON.