2009-05-11 8 views
12

je veux créer une classe anonyme vb.net exactement comme ceci:Anonyme initialisation de classe dans 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?"}} 
       } 
      }; 

thx.

+1

Votre exemple montre une classe anonyme en C#, il est pas lié à JSON .. –

+0

Le contexte derrière sa question se trouve plus en détail ici: http: // haacked. com/archive/2009/04/14/en utilisant-jquery-grid-with-asp.net-mvc.aspx –

Répondre

17

VB.NET 2008 n'a pas la construction new[], mais VB.NET 2010 le fait. Vous ne pouvez pas créer un tableau de types anonymes directement en VB.NET 2008. L'astuce consiste à déclarer une fonction comme ceci:

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

Et que le compilateur infère le type pour nous (car il est le type anonyme, nous ne pouvons pas spécifier le nom). Ensuite, utilisez-le comme:

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. Ce n'est pas appelé JSON. C'est ce qu'on appelle un type anonyme.

+0

Je pense que ce n'est plus vrai. –

+0

Voir http://stackoverflow.com/questions/3799403 – royco

+0

Il est encore vrai avec VS2008 ;-) –

8

En 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?"}} 
    } 
} 
Questions connexes