Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net VB.NET中列表的合并、处理和序列化_Asp.net_Json_Vb.net_List - Fatal编程技术网

Asp.net VB.NET中列表的合并、处理和序列化

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

我正试图从一个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 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是不会接受它的