Инициализация анонимного класса в VB.Net - PullRequest
12 голосов
/ 12 мая 2009

Я хочу создать анонимный класс в vb.net точно так же:

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?"}}
                }
            };

ТНХ.

Ответы [ 2 ]

18 голосов
/ 12 мая 2009

VB.NET 2008 не имеет конструкции new[], но VB.NET 2010 имеет. Вы не можете создать массив анонимных типов непосредственно в VB.NET 2008. Хитрость заключается в том, чтобы объявить такую ​​функцию:

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

И пусть компилятор выведет нам тип (так как это анонимный тип, мы не можем указать имя). Тогда используйте это как:

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. Это не называется JSON. Это называется анонимным типом.

8 голосов
/ 19 декабря 2011

В VS2010:

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