views:

1694

answers:

1

i want to create an anonymous class in vb.net exactly like this:

var data = new {
                total = totalPages,
                page = page,
                records = totalRecords,
                rows = new[]{
                    new {id = 1, cell = new[] {"1", "-7", "Is this a good question?"}},
                    new {id = 2, cell = new[] {"2", "15", "Is this a blatant ripoff?"}},
                    new {id = 3, cell = new[] {"3", "23", "Why is the sky blue?"}}
                }
            };

thx.

+10  A: 

VB.NET does not have the new[] construct. You cannot create an array of anonymous types directly. The trick is to declare a function like this:

Function GetArray(Of T)(ByVal ParamArray values() As T) As T()
    Return values
End Function

And have the compiler infer the type for us (since it's anonymous type, we cannot specify the name). Then use it like:

Dim jsonData = New With { _
  .total = totalPages, _
  .page = page, _
  .records = totalRecords, _
  .rows = GetArray( _
        New With {.id = 1, .cell = GetArray("1", "-7", "Is this a good question?")}, _
        New With {.id = 2, .cell = GetArray("2", "15", "Is this a blatant ripoff?")}, _
        New With {.id = 3, .cell = GetArray("3", "23", "Why is the sky blue?")}
   ) _
}

PS. This is not called JSON. It's called an anonymous type.

Mehrdad Afshari
I think this is no longer true.
Chris Dwyer
See http://stackoverflow.com/questions/3799403
Slack