JSON不会反序列化一个简单的对象(令人疯狂!)

时间:2018-09-23 01:05:33

标签: json

我有一个名为“概念对象”的简单对象,它具有多个属性。这些属性通常为空。我必须序列化这些对象的集合,并且由于我现在无法进入的原因,必须将JSON序列化程序设置设置为“ TypeNameHandling.Auto”。

它可以很好地进行序列化,但是在反序列化时会引发错误,指出“无法将JToken类型转换为'Concept Object'类型”。这个错误从表面上看是令人困惑,因为在我看来,JSON反序列化器的全部目的是将JTokens转换为特定类型。

无论如何,我不知道为什么Desailailizer抛出此错误。更糟糕的是,我过去在下面包含的完全相同的代码和JSON在过去对我来说效果很好,所以我想知道是否需要更改/设置应用程序或Newtonsoft中的某些怪异设置。 >

这是概念对象:

Public Class ConceptObject

Private _wordName As String
Public Property wordName() As String
    Get
        Return _wordName
    End Get
    Set(ByVal value As String)
        _wordName = value
    End Set
End Property

'Other Properties...

Sub New(wordN as string)
   _wordName = wordN
End Sub

结束班级

这是要序列化的简单测试类:

Public Class testClass
    Property myCOList As New List(Of ConceptObject)

    Property co1 As ConceptObject

    Sub New()
        Dim test1 As ConceptObject = new conceptObject("test1")
        Dim test2 As ConceptObject = new conceptObject("test2")
        myCOList.Add(test1)
        myCOList.Add(test2)
        co1 = test1
    End Sub
End Class

这是序列化和反序列化测试代码:

Dim tClass As New testClass
Dim jsonSerialSettings As New JsonSerializerSettings With {.TypeNameHandling = TypeNameHandling.Auto}
Dim oneStr As String = Newtonsoft.Json.JsonConvert.SerializeObject(tClass, Newtonsoft.Json.Formatting.None, New JsonSerializerSettings() With {.NullValueHandling = NullValueHandling.Ignore, .DefaultValueHandling = DefaultValueHandling.Ignore, .TypeNameHandling = TypeNameHandling.Auto})
Dim newClass As testClass = Newtonsoft.Json.JsonConvert.DeserializeObject(Of testClass)(oneStr)  ', jsonSerialSettings)

这是生成的JSON:

{"myCOList":[{"wordName":"test1"},{"wordName":"test2"}],"co1":{"wordName":"test1"}}

如您所见,“ testClass”上的属性是强类型的,因此我不明白为什么JSON反序列化器需要我为每个概念对象包括类型名称(如果我确实包含类型,它工作正常)。任何帮助将不胜感激!

0 个答案:

没有答案