Asp.net 具有更改属性的VB.NET 4.0 DataContractJsonSerializer
我使用System.Runtime.Serialization.Json.DataContractJsonSerializer序列化了一些对象,并将其写入我的数据库:Asp.net 具有更改属性的VB.NET 4.0 DataContractJsonSerializer,asp.net,vb.net,json,serialization,Asp.net,Vb.net,Json,Serialization,我使用System.Runtime.Serialization.Json.DataContractJsonSerializer序列化了一些对象,并将其写入我的数据库: Dim serializer = New DataContractJsonSerializer(obj.GetType) Using ms = New MemoryStream() serializer.WriteObject(ms, obj) ms.Position = 0 Using sr = New
Dim serializer = New DataContractJsonSerializer(obj.GetType)
Using ms = New MemoryStream()
serializer.WriteObject(ms, obj)
ms.Position = 0
Using sr = New StreamReader(ms)
Dim json = sr.ReadToEnd()
sr.Close()
Return json
End Using
End Using
现在我必须更改类并添加一些新属性
然后我想将旧字符串反序列化为新类:
Using ms = New MemoryStream(Encoding.UTF8.GetBytes(serialized))
Dim ser = New DataContractJsonSerializer(GetType(T))
Return DirectCast(ser.ReadObject(ms), T)
End Using
现在如何将旧字符串反序列化到新类?新属性可以保持为空
谢谢大家! 我们找到了这个问题的解决方案: 我们从DataContractJsonSerializer切换到JSON.Net。 现在的问题是,JSON.Net使用不同的命名约定进行序列化,因此无法反序列化数据库中的旧序列化数据。 DataContractJsonSerializer使用_propertyname,而JSON.Net使用propertyname 但幸运的是,JSON.Net序列化程序允许我们用一个小类覆盖命名生成:
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数据向类添加属性