首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将JSON反序列化为List (或其他对象类型)

将JSON反序列化为List (或其他对象类型)
EN

Stack Overflow用户
提问于 2019-07-03 16:22:15
回答 1查看 89关注 0票数 0

我有一些问题,将一些JSON反序列化为可以使用的对象类型。

我一直在尝试多种不同的反序列化方法,但我无法让它们中的任何一种发挥作用。目前,我正在尝试使用Newtonsoft.Json反序列化器。

代码语言:javascript
复制
Public Class ServerRecord
    Inherits Record
    <Newtonsoft.Json.JsonProperty("sys_class_name")>
    Public Property sys_class_name As String
        Get
        End Get
        Set(value As String)
        End Set
    End Property

    <Newtonsoft.Json.JsonProperty("host_name")>
    Public Property host_name As String
        Get
        End Get
        Set(value As String)
        End Set
    End Property
    <Newtonsoft.Json.JsonProperty("u_recovery_time_achievable")>
    Public Property u_recovery_time_achievable As String
        Get
        End Get
        Set(value As String)
        End Set
    End Property
End Class


Dim lstSNServersList As New List(Of ServerRecord)
Dim objServiceNowTableAPIClient As TableAPI.TableAPIClient(Of ServerRecord)
Dim objServiceNowRESTQueryResponse As RESTQueryResponse(Of ServerRecord)

    objServiceNowTableAPIClient = New TableAPIClient(Of wServerRecord)(strServiceNowCMDBServersTableName, strServiceNowInstanceName, strServiceNowUser, strServiceNowPassword)
    strServiceNowQuery = "sys_class_name=cmdb_ci_win_server^ORsys_class_name=cmdb_ci_linux_server"
    objServiceNowRESTQueryResponse = objServiceNowTableAPIClient.GetByQuery(strServiceNowQuery)
    'this much does work and it does return a result set

    'this is my attempt to convert this response into a list of ServerRecords, but this does not work currently:
    lstSNServersList = JsonConvert.DeserializeObject(Of List(Of ServerRecord))(objServiceNowRESTQueryResponse.RawJSON) 

objServiceNowRestQueryResponse.RawJSON字符串看起来如下(虽然更长):

代码语言:javascript
复制
{
   "result":[
      {
         "sys_id":"00040665dbxxxxxx96191e",
         "u_recovery_time_achievable":"720",
         "sys_class_name":"cmdb_ci_linux_server",
         "host_name":"rlserver001"
      },
      {
         "sys_id":"00ec543d1xxxx66e4bcb6d",
         "u_recovery_time_achievable":"4",
         "sys_class_name":"cmdb_ci_linux_server",
         "host_name":"plserver001"
      },
      {
         "sys_id":"0105d975dbxxxxx8961998",
         "u_recovery_time_achievable":"",
         "sys_class_name":"cmdb_ci_linux_server",
         "host_name":"tlserver001"
      }
   ]
}

这是我试图运行代码时得到的错误消息:

引发的异常:“Newtonsoft.Json.JsonSerializationException”在Newtonsoft.Json.dll中 其他信息:无法将当前JSON对象(例如,{“名称”:“值”})反序列化为'System.Collections.Generic.List`1CMDBReconciliation.CMDBReconciliation+ServiceNowServerRecord‘类型,因为该类型需要一个JSON数组(例如,1,2,3)才能正确反序列化。 要修复此错误,要么将JSON更改为JSON数组(例如,1,2,3),要么更改反序列化类型,使之成为可以从JSON对象反序列化的普通.NET类型(例如,不像整数这样的原始类型,而不是数组或列表之类的集合类型)。还可以将JsonObjectAttribute添加到类型中,以强制它从JSON对象反序列化。 路径‘结果’,第1行,位置10。

EN

回答 1

Stack Overflow用户

发布于 2019-07-03 17:49:30

这会管用的。它只是从json字符串中提取数组部分。

代码语言:javascript
复制
Dim start As Integer = objServiceNowRESTQueryResponse.IndexOf("[")
Dim last As Integer = objServiceNowRESTQueryResponse.LastIndexOf("]")
lstSNServersList = JsonConvert.DeserializeObject(Of List(Of ServerRecord))(objServiceNowRESTQueryResponse.Substring(start, last - start + 1))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56874433

复制
相关文章

相似问题

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