Imports System.Collections
Imports System.Collections.Generic
Imports System.Globalization
Imports System.Reflection
Imports System.ComponentModel.DataAnnotations
Imports Newtonsoft.Json.Linq
Imports Newtonsoft.Json.Converters
Imports Newtonsoft.Json.Serialization
Public Module JsonExtensions
Public Function DeserializeAnonymousSequence(Of TElement)(ByVal json as String, ByVal template as TElement, Optional ByVal settings as JsonSerializerSettings = Nothing) As IEnumerable(Of TElement)
Return DeserializeSequence(Of TElement)(new StringReader(json), settings)
Public Function DeserializeAnonymousSequence(Of TElement)(ByVal textReader as TextReader, ByVal template as TElement, Optional ByVal settings as JsonSerializerSettings = Nothing) As IEnumerable(Of TElement)
Return DeserializeSequence(Of TElement)(textReader, settings)
Public Function DeserializeSequence(Of TElement)(ByVal json as String, Optional ByVal settings as JsonSerializerSettings = Nothing) As IEnumerable(Of TElement)
Return DeserializeSequence(Of TElement)(new StringReader(json), settings)
Public Iterator Function DeserializeSequence(Of TElement)(ByVal textReader as TextReader, Optional ByVal settings as JsonSerializerSettings = Nothing) As IEnumerable(Of TElement)
Dim serializer as JsonSerializer = JsonSerializer.CreateDefault(settings)
Using jsonReader as New JsonTextReader(textReader)
jsonReader.CloseInput = false
jsonReader.SupportMultipleContent = true
Yield serializer.Deserialize(Of TElement)(jsonReader)
Dim json as String = GetJson()
Console.WriteLine("Input JSON: ")
Friend Sub TestDeserialize(ByVal json as String)
dim listOfList = (From a In JsonExtensions.DeserializeAnonymousSequence(json, New With { .data = DirectCast(Nothing, List(Of String)) })
dim list = (From a In JsonExtensions.DeserializeAnonymousSequence(json, New With { .data = DirectCast(Nothing, List(Of String)) })
Console.WriteLine("List of list of strings via deserialization: ")
Console.WriteLine(JsonConvert.SerializeObject(listOfList))
Console.WriteLine("List of strings via deserialization: ")
Console.WriteLine(JsonConvert.SerializeObject(list))
Sub TestLinq(ByVal json as String)
Dim query = From obj in JsonExtensions.DeserializeSequence(Of JObject)(json)
From array in obj.Descendants().OfType(Of JArray)()
Where item.Type = JTokenType.String
Let str = Item.ToString()
dim list as List(Of String) = query.ToList()
Console.WriteLine("List of strings via LINQ to JSON: ")
Console.WriteLine(JsonConvert.SerializeObject(list))
Function GetJson() as String
Dim Jstring As String = <![CDATA[{data : [ "value 1", "value 2", "value 3"]}{data : [ "value 1", "value 2", "value 3"]}]]>.Value
Console.WriteLine("Environment version: " & Environment.Version.ToString())
Console.WriteLine("Json.NET version: " & GetType(JsonSerializer).Assembly.FullName)
Console.WriteLine("Unhandled exception: ")