【问题标题】:Conversion from type 'JObject' to type 'String' is not valid从“JObject”类型到“String”类型的转换无效
【发布时间】:2019-11-08 21:35:59
【问题描述】:

我在 VB.net 中遇到一个问题,远程系统以 System.Collections.Generic.List 的形式向我返回 Json 对象列表。我可以遍历列表并获取每一行,它是一个看起来有点像这样的 JsonObject

{
  "Demo": {
    "_id": "8ebf5297-64bb-4c92-9883-0b528e3af26c",
    "_type": "cname",
    "status": "pending",
    "batch": 0,
    "action": null,
    "number": "2135551212",
    "cname_text": "DEMO CENAME",
    "history": {
      "created_on": "2019-11-08T12:41:56.1182915-08:00",
      "created_by": "DEMO",
      "batch_date": "0001-01-01T00:00:00"
    }
  }
}

那么如何将其转换为常规对象,以便我可以轻松访问这些值? 我试过了

Dim myData = JObject.Parse(row)

Dim myData = JsonConvert.DeserializeObject(Of Dictionary(Of String, Object))(row)

两者都会产生错误

发生“System.InvalidCastException”类型的未处理异常 在 Microsoft.VisualBasic.dll 中从类型 'JObject' 转换为类型 “字符串”无效。

【问题讨论】:

  • 也许这个论坛上的这篇文章可能会有所帮助:stackoverflow.com/questions/13416497/…
  • 并非如此,因为它没有解决导致错误的原因
  • 您需要实际创建一个反映 json 结构的对象并反序列化为该对象
  • 你使用数据访问:something = myData("Demo")("_id").tostring

标签: vb.net


【解决方案1】:

在让我发疯之后,我想通了。远程服务返回 VB.net 不将其视为字符串的数据,而是一个无法转换为字符串的 JObject。所以为了解决这个问题,我创建了一个结构,然后使用 JObject from to Object 方法将我的 Json 对象转换为普通对象。

Dim tmpRow = JObject.FromObject(row).ToObject(Of CnameRecord)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-10
    • 1970-01-01
    • 1970-01-01
    • 2012-08-03
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多