Asp.net 具有更改属性的VB.NET 4.0 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

我使用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 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数据向类添加属性