【问题标题】:Json not derserialising correctlyJson 没有正确反序列化
【发布时间】:2019-08-21 05:39:26
【问题描述】:

Json 字符串没有正确反序列化

玩过我的课程等,但 bfevent 总是返回 Nothing 已经尝试过 Public Property bfevent As BFEvent() 以防它需要能够获取多个值

很确定这很简单......

strcatalogue = "{ "jsonrpc": "2.0", "result": [{ "event": { "id": "29202748", "name": "Kings XI Punjab v Mumbai Indians", "countryCode": "GB", "timezone": "GMT", "openDate": "2019-03-30T10:30:00.000Z" }, "marketCount": 20 }, { "event": { "id": "29201119", "name": "Victoria v NSW Blues", "countryCode": "AU", "timezone": "GMT", "openDate": "2019-03-27T23:30:00.000Z" }, "marketCount": 2 }, { "event": { "id": "29202753", "name": "Chennai Super Kings v Rajasthan Royals", "countryCode": "GB", "timezone": "GMT", "openDate": "2019-03-31T14:30:00.000Z" }, "marketCount": 35 }], "id": 1 }"
Dim objJson = JsonConvert.DeserializeObject(Of BFEventList)(strCatalogue)


Public Class BFEvent
    Public Property id As String
    Public Property name As String
    Public Property countryCode As String
    Public Property timezone As String
    Public Property openDate As DateTime
End Class

Public Class BFResult
    Public Property bfevent As BFEvent
    Public Property marketCount As Integer
End Class

Public Class BFEventList
    Public Property jsonrpc As String
    Public Property result As BFResult()
    Public Property id As Integer
End Class

BFEvent = 没有

marketCount 工作正常,所以与 BFEvents 类有关

【问题讨论】:

  • 似乎课程很好,你得到什么错误?
  • 没有错误 - 只是无法为 bfevent 返回任何内容。 bfevent=nothing marketcount=1
  • 已添加图片
  • 您正在尝试读取引用类的值
  • 问题是 class= Nothing 当它应该有 5 个值时

标签: json vb.net class


【解决方案1】:

所以我重命名了我的类以引用 json 中的实际字符串值。所以 bfevent 现在是事件。我不确定这是否是“必需的”。将在我有工作代码的其他地方进行测试。

但我现在得到“关键字不是有效标识符”

Public Property Event As BFEvent()

带有下划线的事件。

这里没有错误

Dim Name As String = objJson.result(0).Event(0).name

但由于上述错误无法编译

【讨论】:

  • BFEventList 中,将result 更改为List(Of BFResult)。在BFResult 中,添加一个属性:<JsonProperty("event")> Public Property EventData As BFEvent。现在您可以正确反序列化并将根类序列化为原始 JSON。 <JsonProperty(...)> 允许指定原始属性名称,这在名称与语言保留名称不兼容时很有用。您还可以将保留名称括在方括号中 ([Event])。最好不要。
  • 感谢 Jimi,但我不确定我是否完全遵循该放在哪里
  • 再次阅读评论。 => 你有BFEventList 课程吗?它有result 属性吗?如果是,请按照说明进行更改。那么,你有一个名为BFResult 的类吗?如果是,将<JsonProperty("event")> 属性添加到Public Property bfevent As BFEvent,将bfevent 重命名为EventData。你可以走了。
  • 轰隆隆。非常感谢。如果您能抽出 5 分钟的时间,或者将我指向一个合适的网站,那么确切地了解为什么会奏效会很好。无论哪种方式都非常感谢
  • 您可以将类对象的集合反序列化为数组。不禁止。 List(Of class) 处理得更好(在解串器端和你端,更容易使用)。 -- 当原始 JSON 的属性的名称与所使用的语言不兼容时(例如 - 在您的情况下 - 属性名称等于该语言的保留字) - 或者您不喜欢出于任何原因的原始名称 - 您可以将 <JsonProperty("...")> 属性添加到引用原始 JSON 属性名称的类属性。 (...)
猜你喜欢
  • 2019-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-28
  • 2019-05-02
  • 2012-06-15
  • 1970-01-01
  • 2019-04-11
相关资源
最近更新 更多