Anonymous class initialization in VB.Net

本小妞迷上赌 提交于 2020-01-31 07:10:08

问题


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.


回答1:


VB.NET 2008 does not have the new[] construct, but VB.NET 2010 does. You cannot create an array of anonymous types directly in VB.NET 2008. 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.




回答2:


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


来源:https://stackoverflow.com/questions/849836/anonymous-class-initialization-in-vb-net

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!