How to deserialize JSON which can be an array or a single object

前端 未结 4 1096
迷失自我
迷失自我 2021-01-13 04:45

I\'m fairly new to using JSON.net and having trouble with some json I\'m getting which sometime comes in as an array and sometimes as single object. Here is an example of wh

4条回答
  •  误落风尘
    2021-01-13 05:29

    You can generically deserialize to Object and then inspect what you have. You can check for a JArray or JObject and act accordingly. You don't even need to deserialize into a specific type, you can work with the Dynamic objects but that may not be the best idea.

        Module Module1
    
        Sub Main()
         Dim jsonWithArray As String = "{""Make"":""Dodge"",""Model"":""Charger"",""Lines"": [{""line"":""base"",""engine"": ""v6"",""color"":""red""},{""line"":""R/T"",""engine"":""v8"",""color"":""black""}],""Year"":""2013""}"
         Dim jsonWithObject As String = "{""Make"":""Dodge"",""Model"":""Charger"",""Lines"": {""line"":""base"",""engine"": ""v6"",""color"":""red""},""Year"":""2013""}"
    
         Dim witharray As Newtonsoft.Json.Linq.JObject = Newtonsoft.Json.JsonConvert.DeserializeObject(jsonWithArray)
         Dim withstring As Newtonsoft.Json.Linq.JObject = Newtonsoft.Json.JsonConvert.DeserializeObject(jsonWithObject)
    
         Dim jtokArray As Newtonsoft.Json.Linq.JToken = witharray("Lines")
         Dim jtokStr As Newtonsoft.Json.Linq.JToken = withstring("Lines")
    
         If (jtokArray.GetType() Is GetType(Newtonsoft.Json.Linq.JArray)) Then
            Console.WriteLine("its an array")
         End If
    
         If (jtokStr.GetType() Is GetType(Newtonsoft.Json.Linq.JObject)) Then
            Console.WriteLine("its an object")
         End If
    
        Console.ReadKey()
    
        End Sub
    
    End Module
    

提交回复
热议问题