我在反序列化以下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就是问题所在(我认为)。
很高兴对此发表想法。
谢谢
答案 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字符串...但是现在可以读取它了...
...我需要一杯咖啡...