【问题标题】:Creating JSON inside a loop in .Net在 .Net 中的循环内创建 JSON
【发布时间】:2021-06-14 05:59:39
【问题描述】:

我试图让这段代码动态工作,但我做不到。
我需要添加更多行,将此代码放在 for 循环中。

我的实际工作代码是:

Dim objAtrib as object = New With {Key .attributes = {
    New With {Key .id = "MODEL", Key .value_name = "RT1"},
    New With {Key .id = "BRAND", Key .value_name = "SAM"}
}}

我需要这样的:

For i as integer = 0 to r.count
  Dim objAtrib As Object = New With {Key .attributes = {
      New With {Key .id = i, Key .value_name = i}
  }}
Next

任何帮助将不胜感激。
JSON 结果应该是这样的:

{
   "attributes":[
      {
         "id":"Z",
         "value_name":"0"
      },
      {
         "id":"A",
         "value_name":"1"
      },
      {
         "id":"B",
         "value_name":"2"
      },
      {
         "id":"C",
         "value_name":"3"
      },
      {
         "id":"D",
         "value_name":"4"
      },
      {
         "id":"F",
         "value_name":"5"
      },
      {
         "id":"G",
         "value_name":"6"
      }
   ]
}

类模型是:

 Public Class Attributes
        Public Property id As String
        Public Property value_name As String
    End Class

    Public Class RootObjectAtributosPublicar
        Public Property attributes As Attributes()
    End Class

这不起作用:

For m As Integer = 0 To grid.RowCount
    Dim id As String = ""
    Dim valor As String = ""

    id = grid.GetRowCellValue(m, "id")
    valor = grid.GetRowCellValue(m, "Valor")

    objAtrib.attributes(m).id = id
    objAtrib.attributes(m).value_name = valor
 Next

【问题讨论】:

  • 你有数据来源吗?它是什么?是的,但是每次都不一样。有时数组(属性)可能有 1 个值或 10 个值。 Attributes 是一个数组,里面有 id 和 value_name
  • 再次感谢吉米,完成。
  • 数据的来源是一个 GridView 控件,我获取 id 和 value_name 值,我必须添加到对象中。我不知道怎么做。
  • 我在原始帖子中添加了新的代码行。我的问题是将数据转换为对象。
  • 你不知道你帮了我多少。我已经花了一整天的时间。我真的很感谢你。我会考虑你的cmets。请告诉我如何珍惜您的帮助。再次感谢。

标签: json vb.net loops


【解决方案1】:

为将数据源描述为序列化为 JSON 而构建的模型看起来是正确的,因为它与所需的 JSON 结果匹配。
需要做一个小改动来简化程序:将 Root 对象中的数组更改为 List(Of Attributes),这样可以将新对象添加到集合中是一种更有效的方法:

Public Class RootObjectAtributosPublicar
    Public Property attributes As List(Of Attributes)
End Class

Public Class Attributes
    Public Property id As String
    Public Property value_name As String
End Class

的,只是循环数据源中的对象(这里,数据取自一个控件-我建议使用用于填充控件的数据源,如果可能的话),创建一个新的Attributes对象迭代并用从源读取的数据填充它,然后将新对象添加到 Root 对象中定义的 List:

Dim root = new RootObjectAtributosPublicar() 
root.attributes = new List(Of Attributes)

For m As Integer = 0 To grid.RowCount
   Dim attr = new Attributes() 

   attr.id = grid.GetRowCellValue(m, "id") 
   attr.value_name = grid.GetRowCellValue(m, "Valor") 
   root.attributes.Add(attr) 
Next

现在,要生成 JSON,您可以序列化 RootObjectAtributosPublicar 对象:

Json.Net:

Dim json = JsonConvert.SerializeObject(root)

System.Text.Json:

Dim json = JsonSerializer.Serialize(root)

结果当然是一样的:

{
   "attributes":[
      {
         "id":"MODEL",
         "value_name":"RT1"
      },
      {
         "id":"BRAND",
         "value_name":"SAM"
      }
   ]
}

【讨论】:

    猜你喜欢
    • 2016-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-12
    • 1970-01-01
    • 1970-01-01
    • 2018-01-11
    • 2016-11-11
    相关资源
    最近更新 更多