首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在VB.NET中组合、处理和序列化列表

在VB.NET中组合、处理和序列化列表
EN

Stack Overflow用户
提问于 2017-06-01 04:27:44
回答 1查看 49关注 0票数 0

我正在尝试用列表中JSON的形式从一个JSON方法中构建我的响应

第一列表属性

代码语言:javascript
复制
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

我的第二个列表属性

代码语言:javascript
复制
 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

我按照下面的代码分别填写这些列表

代码语言:javascript
复制
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正在尝试将它们结合起来,我尝试了以下方法,

  1. Dim组合= Ptdata.Concat(Prtdata).ToList()而我得到了这个错误,

无法转换'system.collections.generic.list`1‘类型的对象

  1. Dim组合= Ptdata.AddRange(Prtdata).ToList()而我得到了这个错误,

表达式不会产生值。

我的目标JSON应该是这样的

代码语言:javascript
复制
{
"PtRegData": {
    "RecID": "1277",
    "filenum": "15090248",
    "name": "Ahmad",

    "PartnerData": [{
        "RecID": 2383,
        "PrtStatus": 1
    }, {
        "RecID": 3387,
        "PrtStatus": 0
    }, {
        "RecID": 3388,
        "PrtStatus": 0
    }]
}}

+如何在序列化列表之前向列表中添加名称?

编辑

代码语言:javascript
复制
 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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-01 05:52:34

让我们假设您有以下类型:

代码语言:javascript
复制
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

名字和财产并不重要。只有父子关系是重要的。父类型具有一个属性,它是子类型的集合。假设您有两个父项和子项的列表:

代码语言:javascript
复制
Dim parents As New List(Of Parent)
Dim children As New List(Of Child)

可以填充每个Children对象的Parent属性,如下所示:

代码语言:javascript
复制
For Each p In parents
    p.Children.AddRange(children.Where(Function(c) c.ParentId = p.ParentId))
Next

如果您更喜欢长手版本:

代码语言:javascript
复制
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年)可能不支持上述只读属性的语法。以下代码应适用于所有版本:

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44298552

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档