vb.NET 将 JSON 列表反序列化为对象

2024-04-25

我还没有找到我正在寻找的确切答案,所以我想我会尝试提出这个问题。

我目前正在尝试使用 Json.NET 将 JSON 字符串反序列化为 vb.NET 中的对象;我之前已经通过设置适当的类,然后使用父类将字符串反序列化为对象来完成了一些工作,并且它们工作得很好,但是这个似乎并没有完全正确地分解。

我尝试分解的字符串示例如下:

   [
    {
        "value": 12345,
        "text": "Example Unique Text"
    },
    {
        "InnerList": [
            {
                "value": 4746,
                "text": "A duplicated entry of text"
            },
            {
                "value": 4747,
                "text": "A duplicated entry of text"
            },
            {
                "value": 4748,
                "text": "A duplicated entry of text"
            },
            {
                "value": 4749,
                "text": "A duplicated entry of text"
            },
            {
                "value": 4750,
                "text": "A duplicated entry of text"
            },
            {
                "value": 4751,
                "text": "A duplicated entry of text"
            },
            {
                "value": 4752,
                "text": "A duplicated entry of text"
            },
            {
                "value": 4753,
                "text": "A duplicated entry of text"
            },
            {
                "value": 4754,
                "text": "A duplicated entry of text"
            },
            {
                "value": 4755,
                "text": "A duplicated entry of text"
            }
        ],
        "duplicated": "Yes"
    },
    {
        "value": 15298,
        "text": "Another Example Unique Text"
    },
    {
        "value": 959,
        "text": "Yet more uniqueness"
    },
    {
        "value": 801,
        "text": "A final little bit of unique text"
    }
]

我尝试过通过许多外部工具传递它,它们都返回相同的类定义,但它们似乎不起作用。因此,根据我对 JSON 的理解,我整理了以下内容:

 Public Class ItemDetails

        Public Value As Integer
        Public Text As String

 End Class

 Public Class ItemArray

        Public DetailList As List(Of ItemDetails)
        Public Duplicated As String

 End Class

 Public Class GeneralArray

        Public GeneralList As List(Of ItemArray)

 End Class

GeneralArray 是父类,用于解析 JSON。

然后我尝试将字符串反序列化到父类。在以下示例中,JSONStringCollection 是上面概述的 JSON 字符串,JSONStringCollection 是定义 GeneralArray 的模块:

Dim JSONString As String

JSONString = "<JSONStringDetails>"

Dim JSONObj = JsonConvert.DeserializeObject(Of JSONStringCollection.GeneralArray)(JSONString)

不幸的是,当传递这个时,返回以下内容并且例程中断:

未处理的类型异常 “Newtonsoft.Json.JsonSerializationException”发生在 Newtonsoft.Json.dll

附加信息:无法反序列化当前 JSON 数组 (例如 [1,2,3])到类型“ShadOS.JSONStringCollection+GeneralArray”中,因为 type 需要一个 JSON 对象(例如 {"name":"value"})来反序列化 正确。

我缺少什么?


您的 JSON 字符串代表一个array对象(你可以看到这一点,因为所有东西都包裹在[ and ]).

错误消息显示“您试图将对象数组反序列化为单个对象”。您的目标类型GeneralArray其行为不像数组(例如,它不继承数组/集合类型,也不实现集合接口)。

另一个问题是,JSON 数组是“混合的”——它包含一些看起来像的对象ItemDetails和其他看起来像的物体ItemArray。在像 VB.NET 这样的静态语言中,将其反序列化为不同类型的单个集合更加困难。

一种可能的解决方案是结合您的目标类别ItemDetails and ItemArray分成一个类,沿着

Public Class CombinedItem
    'properties from ItemDetails
    Public Value As Integer
    Public Text As String

    'properties from ItemArray
    Public InnerList As List(Of CombinedItem)
    Public Duplicated As String

End Class

给定这个类,您的反序列化可能如下所示:

Dim JSONObj = JsonConvert.DeserializeObject(Of List(Of CombinedItem))(JSONString)

这里的关键是你告诉 Newtonsoft 目标类型是List(Of CombinedItem)- 类似目标的数组/集合。

Now JSONObj是一个集合CombinedItem- 有些会有Value/Text财产,其他人将拥有InnerList/Duplicated财产。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

vb.NET 将 JSON 列表反序列化为对象 的相关文章

随机推荐

  • 未找到 Java 类 java.util.ArrayList...和 ​​MIME 媒体类型 text/xml 的消息正文编写器

    我使用 Jersey 构建 REST 服务并希望返回Collection
  • 打开新浏览器窗口的最佳方式是什么?

    我知道大多数链接应该留给最终用户来决定如何打开 但我们不能否认有时您几乎 必须 强制进入新窗口 例如以表单形式维护数据 在当前页面 我想知道的是关于在新浏览器窗口中打开链接的 最佳 方式的共识是什么 我知道 a href url targe
  • 如何将 .css 添加到 .cshtml

    我是一个完全的 HTML CSS 新手 我正在尝试获取 cshtml 文件来使用我编写的一些基本 CSS 我需要在 cshtml 中添加哪些代码才能使其使用 CSS 文件 编辑 这是我的 css 文件中的代码 它的目的是塑造我的风格divi
  • awk 计数频率

    嘿 我想统计 awk 中某一列的数据量 一个示例数据集是 2 5 8 1 3 7 8 5 9我想计算第二列中 5 的出现频率 这就是我尝试过的方法 但没有成功 total 0 for i 1 i lt NF i if i 2 if i 5
  • 推送通知未注册到 iOS 13 上的应用程序

    我构建了我的应用程序并在其中放置了一个断点didRegisterForRemoteNotificationsWithDeviceToken但它没有被触发 它在其他版本的 iOS 上运行良好 这是 iOS 13 中的错误还是我错过了 iOS
  • HTML:相对于图像的中心图像标题?

    我想编写 HTML 来对齐图像标题相对于图像的中心 我想对齐图片和标题在一起向左转 无论包含元素的宽度如何 这都应该是正确的 这是我到目前为止所拥有的 unknown containing element div style text al
  • Ubuntu DEB 安装程序使所有 Java 应用程序具有相同的图标

    我已经为基于 Debian 的系统创建了 Java 应用程序的 DEB 安装程序 在我的 DEB 包中 我使用 desktop 文件 如下所示 Desktop Entry Encoding UTF 8 Version version Typ
  • SAP JCo 使用 Java 在 SAP 系统中创建记录

    我正在尝试使用从 ABAP 获得的功能和结构在 SAP 系统中创建一个条目 我指的是这个链接在 SAP 中创建采购信息记录 https stackoverflow com questions 8534602 creating purchas
  • 收到“错误”:“未知的身份验证策略\“jwt \””

    我正在使用 Express Mongoose Passport 和 JWT 实现授权功能 我可以正常注册用户 我能够验证并生成 JWT 我可以在 JWT 站点上解析它 但由于某种原因 我收到未知的身份验证策略错误消息 我将所有代码块放在 P
  • 使用 pysam.TabixFile 注释读取的 Python 脚本中的处理速度振荡

    最初的问题 我正在用 python 3 5 编写一个生物信息学脚本 它解析一个大的 排序和索引的 bam https samtools github io hts specs SAMv1 pdf表示在基因组上对齐的测序读数的文件 将基因组信
  • Spring MVC 3.0 基本身份验证实现

    我目前正在使用 ASP NET 的 Spring MVC 框架将我的 Web 应用程序转换为 Java 不过学习它的好方法 我需要在我的应用程序中实现身份验证 请告诉我我的方法是否足够好和专业 以及如果不是 最好的做法是什么 首先 我正在编
  • TypeScript 传递导入 ES 库

    我想确保我的代码不使用比 ES6 更新的库功能 因此 我的tsconfig json看起来像这样 compilerOptions lib es6 target es6 outDir dist rootDir src module commo
  • 使用 st_buffer 围绕一个地理点画圈

    我想使用都柏林机场周围 110 NM 海里 绘制一个圆sf包裹 稍后我将通过st intersect带有来自 ADS B 的飞行位置报告 我为 NM 定义了一个新单位 如下所示 library units library tidyverse
  • mysql错误1064

    我正在尝试使用以下代码创建一个表 CREATE TABLE IF NOT EXISTS entries id int 10 NOT NULL auto increment atom id varchar 512 NOT NULL title
  • 是否可以在 docker hub 的自动构建中添加环境变量?

    我想自动化我的构建过程 并且需要传递一个环境变量来运行Dockerfile 我想知道在 Dockerhub 中是否有任何方法可以做到这一点 我知道 docker cloud 有类似的东西 但我想知道 Dockerhub 中是否有这个功能 因
  • Swift-Mailer 错误,“给定邮箱中的地址 [] 不符合 RFC”

    我构建了一个简单的 PHP 联系表单 该表单应该通过 Swiftmailer 脚本发送邮件 问题是我不断收到此错误 未捕获的异常 Swift RfcComplianceException 与 message 给定邮箱中的地址 不符合 RFC
  • MySQL C++ 连接器使用 SELECT 查询获取字符串

    我是 C 上的 mysql 新手 之前在 PAWN 上做过 效果很好 但现在我遇到了问题 我正在尝试从 mysql 数据库获取密码 稍后再执行其余代码 然后我会得到十六进制代码 如果是的话 这是我得到的示例 0x59fcb0 当我重新启动程
  • “缺少可链接的主机!”为设计

    我安装了 Devise 但每当我尝试创建帐户时 事情似乎都会停止 完整的错误如下 Missing host to link to Please provide host parameter or set default url option
  • 使用Delphi Dll和一些问题

    我想使用Delphi制作的dll 它有这个功能 函数 CryptStr str Key AnsiString DecryptStr boolean AnsiString 标准调用 我将 Dll 复制到 bin debug 和应用程序根目录中
  • vb.NET 将 JSON 列表反序列化为对象

    我还没有找到我正在寻找的确切答案 所以我想我会尝试提出这个问题 我目前正在尝试使用 Json NET 将 JSON 字符串反序列化为 vb NET 中的对象 我之前已经通过设置适当的类 然后使用父类将字符串反序列化为对象来完成了一些工作 并