我正在尝试用列表中JSON的形式从一个JSON方法中构建我的响应
第一列表属性
Public Class DataRes
Public Property RecID As Integer
Public Property filenum As Integer
Public Property name As String
Public Property msgcode As String
Public Property msgtitle As String
Public Property msg As String
Public Property PartnerData As List(Of PartnerData)
End Class我的第二个列表属性
Public Class PartnerData
Public Property RecID As Integer
Public Property PrtStatus As Integer
Public Property ptfilenum As Integer
Public Property prfilenum As Integer
End Class我按照下面的代码分别填写这些列表
Dim Ptdata As New List(Of DataRes)()
Using sdr As SqlDataReader = cmd.ExecuteReader()
While sdr.Read()
Ptdata.Add(New DataRes() With { _
.RecID = sdr("RecID").ToString(), _
.filenum = sdr("filenum").ToString(), _
.name = sdr("name").ToString() _
})
End While
End Using
return JsonConvert.SerializeObject(Ptdata)
Dim Prtdata As New List(Of PartnerData)()
Using sdr As SqlDataReader = cmd.ExecuteReader()
While sdr.Read()
Prtdata.Add(New PartnerData() With { _
.prfilenum = sdr("PrtFilenum").ToString(), _
.PrtStatus = sdr("PrtStatus").ToString(), _
.ptfilenum = sdr("PtFilenum").ToString(), _
.RecID = sdr("RecID").ToString() _
})
End While
End Using
return JsonConvert.SerializeObject(PartnerData)
我测试了这两个列表,并从每个列表中获得了期望的结果。
I正在尝试将它们结合起来,我尝试了以下方法,
无法转换'system.collections.generic.list`1‘类型的对象
表达式不会产生值。
我的目标JSON应该是这样的
{
"PtRegData": {
"RecID": "1277",
"filenum": "15090248",
"name": "Ahmad",
"PartnerData": [{
"RecID": 2383,
"PrtStatus": 1
}, {
"RecID": 3387,
"PrtStatus": 0
}, {
"RecID": 3388,
"PrtStatus": 0
}]
}}+如何在序列化列表之前向列表中添加名称?
编辑
Using sdr As SqlDataReader = cmd.ExecuteReader()
While sdr.Read()
Ptdata.Add(New DataRes() With { _
.RecID = sdr("RecID").ToString(), _
.filenum = sdr("filenum").ToString(), _
.name = sdr("name").ToString(), _
.msgcode = sdr("msgcode").ToString(), _
.msgtitle = sdr("msgtitle").ToString(), _
.msg = sdr("msg").ToString() _
})
End While
End Using
Using sdr As SqlDataReader = cmd.ExecuteReader()
While sdr.Read()
Prtdata.Add(New PartnerData() With { _
.prfilenum = sdr("PrtFilenum").ToString(), _
.PrtStatus = sdr("PrtStatus").ToString(), _
.ptfilenum = sdr("PtFilenum").ToString(), _
.RecID = sdr("RecID").ToString() _
})
End While
For Each p In Ptdata
p.PartnerData.AddRange(Prtdata.Where(Function(c) c.ptfilenum = p.filenum))
Next
End Using
发布于 2017-06-01 05:52:34
让我们假设您有以下类型:
Public Class Parent
Public Property ParentId As Integer
Public Property ParentName As String
Public ReadOnly Property Children As New List(Of Child)
End Class
Public Class Child
Public Property ChildId As Integer
Public Property ParentId As Integer
Public Property ChildName As String
End Class名字和财产并不重要。只有父子关系是重要的。父类型具有一个属性,它是子类型的集合。假设您有两个父项和子项的列表:
Dim parents As New List(Of Parent)
Dim children As New List(Of Child)可以填充每个Children对象的Parent属性,如下所示:
For Each p In parents
p.Children.AddRange(children.Where(Function(c) c.ParentId = p.ParentId))
Next如果您更喜欢长手版本:
For Each p In parents
For Each c In children
If c.ParentId = p.ParentId Then
p.Children.Add(c)
End If
Next
Next编辑: VB的旧版本(早于2017年)可能不支持上述只读属性的语法。以下代码应适用于所有版本:
Public Class Parent
Public _children As New List(Of Child)
Public Property ParentId As Integer
Public Property ParentName As String
Public ReadOnly Property Children As List(Of Child)
Get
Return _children
End Get
End Property
End Classhttps://stackoverflow.com/questions/44298552
复制相似问题