【问题标题】:Deserializing json array into .net class将 json 数组反序列化为 .net 类
【发布时间】:2010-02-16 10:29:11
【问题描述】:

我在反序列化一些 json 数据、获取 InvalidCastExceptions 等问题时​​遇到问题。

谁能指出我正确的方向?

这是我要反序列化的 json;

[{"OrderId":0,"Name":"Summary","MaxLen":"200"},{"OrderId":1,"Name":"Details","MaxLen":"0" }]

这是我的代码;

  Public Class jsTextArea
    Public OrderId As Integer
    Public Name As String
    Public MaxLen As String
  End Class

Dim js As New System.Web.Script.Serialization.JavaScriptSerializer
Dim rawdata = js.DeserializeObject(textAreaJson)
Dim lstTextAreas As List(Of jsTextArea) = CType(rawdata, List(Of jsTextArea))

【问题讨论】:

    标签: vb.net json serialization


    【解决方案1】:

    OrderId 是您的 json 中的 Int(请注意值周围缺少引号),但您在“jsTextArea”中将其声明为 String。此外,除非返回 rawdata 的类型具有对 List(Of jsTextArea) 的强制转换,否则您显示的代码可能不会起作用。

    更新 要将数据放入 List(Of jsTextArea) 中,请尝试以下操作:

        Dim js As New System.Web.Script.Serialization.JavaScriptSerializer
        Dim lstTextAreas = js.Deserialize(Of List(Of jsTextArea))(textAreaJson)
    

    【讨论】:

    • @GordonB,请参阅我刚刚添加的更新。该代码对我有用 :) 它似乎还处理 json 和您的类之间的 int 到字符串的转换 :)
    • 啊,好的....刚刚发现使用直接反序列化方法有效... Wa试图将其拆分为多行以查看错误发生的位置,但这没有帮助: )我会给你答案,因为你可能比我早了几秒钟......干杯。
    【解决方案2】:

    在一条线上完成所有工作是一种享受;

    Dim lstTextAreas As List(Of jsTextArea) = js.Deserialize(textAreaJson, GetType(List(Of jsTextArea)))
    

    【讨论】:

    • 主要在 C# 中工作(因此使用 var 来隐式键入变量),我的行版本似乎“更干净”,但它们会编译成相同的 IL 并做完全相同的事情怀疑! :)
    • 是的,两条路线...相同的结果,尽管你的比我的少罗嗦。为你的帮助干杯:)
    【解决方案3】:
    Dim textAreaJson As String = "[{""OrderId"":0,""Name"":""Summary"",""MaxLen"":""200""},{""OrderId"":1,""Name"":""Details"",""MaxLen"":""0""}]"
    Dim js As New System.Web.Script.Serialization.JavaScriptSerializer
    Dim lstTextAreas As jsTextArea() = js.Deserialize(Of jsTextArea())(textAreaJson)
    

    【讨论】:

      【解决方案4】:

      这是一个反序列化任何类型 JSON 的函数:

          Public Function DeserializeJson(Of T)(json As String) As T
              Return New JavaScriptSerializer().Deserialize(Of T)(json)
          End Function
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-10-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-17
        • 2021-04-21
        • 1970-01-01
        相关资源
        最近更新 更多