【发布时间】: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