【问题标题】:How to parse the returned JSON and assign it some properties on an object in VB.Net?如何解析返回的 JSON 并在 VB.Net 中为对象分配一些属性?
【发布时间】:2018-02-14 14:28:26
【问题描述】:

在 VB.Net 应用程序(.Net Framework 的 v4.0)中,我正在调用返回以下内容的 API:

{"CFResponse":{"AccountDetails":[{"AccountNum":"TEST","CurrentBalance":-58.24,"OriginalBalance":1530.01,"TotalPaid":215.33}]}}

我还有一个变量 (userInfo),其中包含一个 GetUserInfoResult.vb 的实例,该实例具有一系列来自先前逻辑的设置属性。

将 JSON 数据映射到我的实例上的属性的干净方法是什么?

CurrentBalance > userInfo.Balances.CurrentBalance

OriginalBalance > userInfo.Balances.OriginalBalance

TotalPaid > userInfo.Balances.TotalPaid

【问题讨论】:

  • thisthis maybe 或者如果你不介意转换然后this
  • @AFriend 如果我使用JsonConvert.DeserializeObject(Of GetUserInfoResult)(jsonString),我不会丢失已经设置的其他属性吗?或者你是说我应该创建一个精确映射到 JSON 结构的 Dto 类?但是如果我这样做,它似乎很乏味,因为当我只需要它们三个属性时,返回的 JSON 非常混乱!
  • 你可以反序列化到一个临时对象,设置你需要的3个属性,然后去掉临时的。此外,只要属性名称匹配,您就不需要 JSON 属性来正确反序列化
  • 嗯,你能告诉我如何回答吗?

标签: asp.net json vb.net


【解决方案1】:

您需要进行一些更改,但大致的想法就在这里

Private Sub SomeJsonThing()
    Dim json = "{'cFResponse': {'AccountDetails':[{'AccountNum':'TEST','CurrentBalance':-58.24,'OriginalBalance':1530.01,'TotalPaid':215.33}]}}"

    Dim tmpJObject As JObject = JsonConvert.DeserializeObject(json)
    Dim cfResponse As JToken = tmpJObject("CFResponse")
    Dim accDetails As JToken = cfResponse("AccountDetails")

    Dim accountDetailsList = accDetails.ToObject(Of List(Of AccountDetails))
    Dim accInfo = accountDetailsList.First

    userInfo.Balances.CurrentBalance = accInfo.CurrentBalance
    userInfo.Balances.OriginalBalance = accInfo.OriginalBalance
    userInfo.Balances.TotalPaid = accInfo.TotalPaid
End Sub

Public Class AccountDetails
    Property AccountNum As String
    Property CurrentBalance As Double
    Property OriginalBalance As Double
    Property TotalPaid As Double
End Class

我会将 JSON 读取分成不同的方法,以及属性的设置。

【讨论】:

  • 我首先需要做Install-Package Newtonsoft.Json -Version 10.0.3是对的吗?
  • 无论哪个兼容版本,都可以。如果您不想安装软件包,那么我提供的this link 有一个JavascriptSerializer 方法
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-31
相关资源
最近更新 更多