【发布时间】:2026-01-09 14:15:01
【问题描述】:
我正在使用 JSON.NET 反序列化来自 HTTP 查询的 JSON 响应,但我在反序列化时遇到了问题。
源JSON是这样的:
[
{
"type": "rpc",
"tid": 18,
"action": "TaskSystem",
"method": "createTask",
"result": {
"0": {
"success": true,
"successes": [
[
"Task successfuly created with S/N #22920"
]
]
},
"1": {
"success": true,
"successes": [
[
"Task successfuly created with S/N #22921"
],
"Task #22921 marked as urgent"
]
},
"records": [
{
"id": 22920
},
{
"id": 22921
}
],
"success": true
}
}
]
我一直在使用这些类进行反序列化:
Private Sub Deserialize()
Dim Jobj = Newtonsoft.Json.JsonConvert.DeserializeObject(Of Response())(Jstring)
End Sub
Public Class Record
Public Property id As Integer
End Class
Public Class Result
Public Property records As Record()
Public Property success As Boolean
End Class
Public Class Response
Public Property type As String
Public Property tid As Integer
Public Property action As String
Public Property method As String
Public Property result As Result
End Class
但是我丢失了查询返回的成功/失败消息
我应该如何编写类 Result 以收集属性 records As Record()、succes As Boolean 和 还有那些名为“0”、“1”等的对象......?
非常感谢您的帮助。
【问题讨论】:
-
[ "Task successfuly ... #22920" ]后面缺少逗号,这导致了List(Of Object)版本。你能检查一下是正确的吗? -
我检查了我的日志,在 #22920 的情况下没有逗号。如果不美化,那部分 JSON 字符串是
"successes": [ [ "Task successfuly created with S/N #22920" ] ],这很奇怪。但话又说回来,如果这些反应真的很好,我想我不会有这些问题...... -
哈哈。您可能想要创建一个转换器并强制这两个家伙使用相同的类型,否则答案有一个快速而肮脏的解决方法
-
反过来呢:22921有逗号吗?
-
是的 :-( ...我如何/在哪里可以学习编写自定义转换器以处理此类问题的基础知识?
标签: json vb.net json.net json-deserialization