列表的JSON反序列化列表

时间:2018-08-14 07:37:02

标签: json vb.net list tuples deserialization

我在反序列化以下JSON字符串时遇到问题:

  

{“错误”:空,“ id”:1234,“结果”:[[[“ config.param1”,“ 111”],[“ config.param2”,“ 1222”]],“配置系统“,1234]}

我的结构是:

 Public Structure stuConResponse
  Dim [Error] As String
  Dim ID As String
  Dim Result As List(Of stuSubResults)
 End Structure


 Public Structure stuSubResults
  Public Property X1 As List(Of List(Of String))
  Public Property X2 As String
  Public Property X3 As String
 End Structure

我的代码是:

  Dim JSonSettings As New Newtonsoft.Json.JsonSerializerSettings
  JSonSettings.CheckAdditionalContent = True
  JSonSettings.DateParseHandling = Newtonsoft.Json.DateParseHandling.DateTime
  JSonSettings.DefaultValueHandling = Newtonsoft.Json.DefaultValueHandling.Ignore
  JSonSettings.FloatFormatHandling = Newtonsoft.Json.FloatFormatHandling.DefaultValue
  JSonSettings.NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore

Dim HeloResponse As Structures.stuConResponse = Newtonsoft.Json.JsonConvert.DeserializeObject(Of Structures.stuConResponse)(ReceivedData, JSonSettings)

我尝试将“结果”制作为以下内容:

1)(的列表((字符串列表,字符串,字符串))

2)((字符串列表))的列表

3)其他列表和元组组合

对于我的一生,我无法反序列化“结果”对象。

读取错误和ID没有问题,但是当Result出现时,我收到JSON无法执行的错误。

我也不介意“结果”是否可以放入未反序列化的字符串中,在该字符串中我可以执行一些手动逻辑,但是由于JSON试图变得过于砍刀,所以这也不起作用。

换句话说,问题是让JSON读取“ [[[X1,Y1],[X2,Y2],X3,X4]”,请注意这是一个列表/数组,并且没有任何键-names就是问题所在(我认为)。

很高兴对此发表想法。

谢谢

2 个答案:

答案 0 :(得分:0)

 Dim JSONC = New JavaScriptSerializer().DeserializeObject(yourjson)
 Debug.Print(JSONC("result")(0)(0)(0)) 'get result collection, then first element, then first object then first element of object

您决定要使用该对象做什么。

您可以将ii转换为字典,然后使用(“键”)获取内容,但是如果数据保持不变,我将毫无意义。

答案 1 :(得分:0)

最后,我解决了!,我不知道您可以使用IDICTIONARY读取整个内容,然后将其分解为ILIST ...

对于遇到相同问题的任何人,以下是解决方法:

1)代码:

  Dim I As Integer
  Dim ConPolConfig As Structures.stuConPolSubscribeResponse = Nothing

  Dim dicItems As IDictionary = Newtonsoft.Json.JsonConvert.DeserializeObject(Of IDictionary)(ReceivedData, JSonSettings)
  ConPolConfig.ID = dicItems("id")
  ConPolConfig.Error = dicItems("error")

  If Not dicItems("result") Is Nothing Then
   ConPolConfig.ConfigItems = New List(Of Dictionary(Of String, String))

   Dim ConfigProperties As IList = dicItems("result")(0)
   Dim ConfSysReader As String = dicItems("result")(1)
   Dim Token As Integer = dicItems("result")(2)

   Dim ParamKey As String
   Dim ParamVal As String

   Dim Dic As New Dictionary(Of String, String)

   For I = 0 To ConfigProperties.Count - 1
    ParamKey = ConfigProperties(I)(0)
    ParamVal = ConfigProperties(I)(1)

    Dic.Add(ParamKey, ParamVal)

    ConPolConfig.ConfigItems.Add(Dic)
   Next
  End If

2)结构:

Public Structure stuConPolSubscribeResponse
 Dim [Error] As String
 Dim ID As String
 Dim ConfigItems As List(Of Dictionary(Of String, String))
End Structure

这可以工作,并且完全按照我最初的问题正在寻找我想要的东西。即读取一个或多个列表,其中主列表具有另外2个不同的元素(字符串和整数)。 iDictionary会完整阅读整个内容,然后可以使用ILIST进行迭代...

不要问我为什么以这种方式编写源JSON字符串...但是现在可以读取它了...

...我需要一杯咖啡...