Imports System.Collections
Imports System.Collections.Generic
Imports System.Text.RegularExpressions
Imports Newtonsoft.Json.Linq
Imports Newtonsoft.Json.Converters
Imports Newtonsoft.Json.Serialization
Public Module JsonExtensions
Iterator Function DeserializeItemsByPath(Of T)(ByVal stream As Stream, regex as Regex, ByVal Optional settings As JsonSerializerSettings = Nothing) As IEnumerable(Of T)
Using textReader = New StreamReader(stream, Encoding.UTF8, true, 1024, true)
For Each item as T In DeserializeItemsByPath(Of T)(textReader, regex, settings)
Iterator Function DeserializeItemsByPath(Of T)(ByVal textReader As TextReader, ByVal regex as Regex, ByVal Optional settings As JsonSerializerSettings = Nothing) As IEnumerable(Of T)
Dim serializer = JsonSerializer.CreateDefault(settings)
Using reader = New JsonTextReader(textReader) With { .CloseInput = False }
If reader.TokenType <> JsonToken.PropertyName And regex.IsMatch(reader.Path)
Yield serializer.Deserialize(Of T)(reader)
Property publishdate As String
Property totalSizeValue as Decimal?
Property bedroomsValue as Decimal?
For Each jsonString in GetJson()
Shared Friend Sub Test1(ByVal json As String)
Dim fileName = "Question74027865.json"
File.WriteAllText(fileName, json)
For Each value in GetListings(fileName)
Console.WriteLine("result: {0}", JsonConvert.SerializeObject(value))
Public Shared Iterator Function GetListings(ByVal fileName as String) as IEnumerable(Of ListingsDTO)
Using stream = File.OpenRead(FileName)
Dim regex as Regex = new Regex("^(listings\[[0-9]+\]|\[[0-9]+\])$", _
RegexOptions.CultureInvariant Or RegexOptions.Compiled Or RegexOptions.Singleline)
JsonExtensions.DeserializeItemsByPath(Of JObject)(stream, regex) _
.Select(Function(dto) new ListingsDTO With {
.publishdate = dto.SelectTokens("publishdate").Select(Function(t) t.ToObject(Of String)()).FirstOrDefault(),
.totalSizeValue = dto.SelectTokens("facilities.totalSize.value").Select(Function(t) t.ToObject(Of Decimal?)()).FirstOrDefault(),
.bedroomsValue = dto.SelectTokens("facilities.bedrooms.value").Select(Function(t) t.ToObject(Of Decimal?)()).FirstOrDefault()
Shared Function GetJson() as IEnumerable(Of String)
"generatedAt":"2022-05-02 02:03:25",
"publishdate":"2022-04-02 02:03:25",
"neighborhood":"Finthen",
"publishdate":"2022-02-02 02:03:24",
"publishdate":"2022-04-02 02:03:25",
"publishdate":"2022-04-02 04:03:25",
Console.WriteLine("Environment version: " & Environment.Version.ToString())
Console.WriteLine("Json.NET version: " & GetType(JsonSerializer).Assembly.FullName)
Console.WriteLine("Unhandled exception: ")