0

First off, apologies if this has already been posted. I have spent some time researching but haven't found a solution.

My goal is to access data from various JSON responses to web requests in vb.net. I am having trouble with nested responses; an example:

Dim JSON as string = '{"url2": {"href": "https://example.com/test2/"}}'

I have the classes like so:

Public Class test1
    Public Class url2
        Public href As String
    End Class
End Class

Deserialize the JSON:

Dim objURL1 As test1 = Newtonsoft.Json.JsonConvert.DeserializeObject(Of test1)(JSON)

This seems to work correctly, however I simply do not know how to access the href value, which is "https://example.com/test2/" in this example.

djv
  • 15,168
  • 7
  • 48
  • 72
Cato
  • 3
  • 3

1 Answers1

0

You are confusing two concepts: Nesting of .Net types and aggregation of instances of .Net objects. (Latter link is for c# but also applies to VB.NET.)

What you want is aggregation by inclusion, like so:

Public Class Url2
    Public Property href As String
End Class

Public Class Test1
    Public Property url2 as Url2
End Class

Then to access the href value do:

Dim objURL1 = Newtonsoft.Json.JsonConvert.DeserializeObject(Of Test1)(JSON)
dim href = objURL1.url2.href

Sample fiddle.

For more background on nested types in .Net, see Why/when should you use nested classes in .net? Or shouldn't you?. If you're coming from Java, see also What are the fundamental differences between Java and C# in terms of inner/local/anonymous classes? which explains that .net nested types are not the same as Java inner classes.

dbc
  • 104,963
  • 20
  • 228
  • 340