【问题标题】:Can .NET deserialize JSON object with Map[]?.NET 可以使用 Map[] 反序列化 JSON 对象吗?
【发布时间】:2014-12-03 18:07:18
【问题描述】:

我们需要在 .NET 中使用一些 Web 服务,这些 Web 服务是用 Java(或者 PHP?)编写的,我相信它们会返回 JSON 对象。最初,JSON 对象完全由 String 属性或其他 JSON 对象的数组组成。

他们最近更新了它们,并且在 Swagger 文档中定义的 JSON 定义中有一些属性,例如:

lockPriceByLockTerm (Map[string,BigDecimal], optional)

所有各种 JSON 类的所有其他属性都定义为

  • (string)
  • (array[string])
  • (OtherJsonObject)
  • (array[OtherJsonObject])

最初我打算使用以下代码将 JSON 反序列化为具有匹配定义的 .NET 类:

Public Function FromJSON(Of T)(data As String) As T
    Dim rv As T
    Dim serializer = New System.Runtime.Serialization.Json.DataContractJsonSerializer(rv.GetType)
    Using ms As MemoryStream = New MemoryStream(Encoding.UTF8.GetBytes(data))
        rv = CType(serializer.ReadObject(ms), T)

        Return rv
    End Using
End Function

这段代码能处理那些Map[] 的事情吗?我需要什么类/类型才能在目标类上创建相应的属性?我假设它会像Dictionary(Of Double, String) 之类的......但我不知道DataContractJsonSerializer 是否可以处理这些。

我之前做过一些基本的对象到 JSON 的序列化,但这是我第一次尝试从 JSON 反序列化。

由于这个项目的运行方式(托管在一个基于云的系统中,可以下载到客户端计算机),我们不能真正使用任何第三方 DLL。它需要在 .NET Framework 本身上严格运行。

我们正在使用 VB.NET 的 Framework 4.5。

【问题讨论】:

  • 什么“那些 Map[] 东西​​”?看起来不像 VB 语法
  • 这就是 Web 服务的 Swagger 文档中描述属性的方式。我还添加了所有类使用的其他已定义属性类型。
  • 你不使用JSON.NET是有原因吗
  • 我们的 DLL 被附加到第三方云应用程序中的自定义表单。据我所知,我们也无法附加其他 DLL。除了知道将安装框架本身之外,我们实际上无法控制最终用户的运行时环境。
  • 嗯,实际上,我也许能够,...我需要玩弄我刚刚找到的其他东西。您确定 JSON.NET 将能够处理那些 Map[] 字段吗?

标签: .net json vb.net deserialization json-deserialization


【解决方案1】:

我建议使用 JSON.NET 而不是 DataContractJsonSerializer(尽管它可能可以完成这项工作)

【讨论】:

    猜你喜欢
    • 2010-12-23
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-25
    • 1970-01-01
    相关资源
    最近更新 更多