Asp.net VB.NET中列表的合并、处理和序列化
我正试图从一个webmethod以JSON的形式从列表中精心设计我的响应 第一个列表属性Asp.net VB.NET中列表的合并、处理和序列化,asp.net,json,vb.net,list,Asp.net,Json,Vb.net,List,我正试图从一个webmethod以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 Str
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
我的第二个列表属性
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作为新列表(数据资源)()
将sdr用作SqlDataReader=cmd.ExecuteReader()
而sdr.Read()
使用{_
.RecID=sdr(“RecID”).ToString()_
.filenum=sdr(“filenum”).ToString()_
.name=sdr(“名称”).ToString()_
})
结束时
终端使用
返回JsonConvert.SerializeObject(Ptdata)
将Prtdata作为新列表(合作伙伴数据)()
将sdr用作SqlDataReader=cmd.ExecuteReader()
而sdr.Read()
添加带有{_
.prfilenum=sdr(“PrtFilenum”).ToString()_
.PrtStatus=sdr(“PrtStatus”).ToString()_
.ptfilenum=sdr(“ptfilenum”).ToString()_
.RecID=sdr(“RecID”).ToString()_
})
结束时
终端使用
返回JsonConvert.SerializeObject(PartnerData)
假设您有以下类型:
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)
您可以像这样填充每个父对象的子对象属性:
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 Class
您需要一个项目类型具有另一个项目类型的列表属性,然后需要为其他列表中的每个项目填充该集合。你不能只是把这两个列表端对端地粘在一起,然后期望它神奇地创建这种关系。@jmcilhinney,谢谢你的回复,我更新了其中的一个类,但我仍然收到相同的错误,,,无法强制转换“system.collections.generic.list”类型的对象`1您是否编写代码将PartnerData
对象添加到与其相关的DataRes
对象的collection?我对列表非常陌生,请原谅我的无知,,,,我添加了此道具。。。。。。。公共属性PartnerData作为(PartnerData的)列表添加到DataResThat属性不会自行填充。您必须写入代码以填充每个项目。我会举个例子。我理解,谢谢,但在我的例子中,这两个列表没有共同的记录,如果我没有正确地解释我自己,我怎么能只附加结果而不创建属性之间的关系,如c.ParentId=p.ParentIdSorry,但我上面的JSON可能更有用。您的JSON表明DataRes
对象是相关PartnerData
对象的父对象。如果您无法确定哪些与哪些相关,那么如何输出显示这些关系的JSON?我更新了编辑部分下的代码,出现了此错误,,,对象引用未设置为对象的实例。,,,两个列表都有c.ptfilenum=p.filenum类型的关系包含子列表的父属性是否必须是“公共只读属性”?因为没有getter.NET是不会接受它的