繁体   English   中英

在VB.NET中转换JSON数据

[英]Converting JSON Data in VB.NET

我正在尝试将此数据转换为结构。

我有这样的结构:

Public Structure cChartData
    Public cUDate As String
    Public cOpen As Double
    Public cClose As Double
    Public cHigh As Double
    Public cLow As Double
End Structure

和这样的类:

Friend Class ChartData
Public Property uDate() As String
    Get
        Return m_date
    End Get
    Set
        m_date = Value
    End Set
End Property
Private m_date As String
Public Property high() As String
    Get
        Return m_high
    End Get
    Set
        m_high = Value
    End Set
End Property
Private m_high As String
Public Property low() As String
    Get
        Return m_low
    End Get
    Set
        m_low = Value
    End Set
End Property
Private m_low As String
Public Property open() As String
    Get
        Return m_open
    End Get
    Set
        m_open = Value
    End Set
End Property
Private m_open As String
Public Property close() As String
    Get
        Return m_close
    End Get
    Set
        m_close = Value
    End Set
End Property
Private m_close As String
Public Property volume() As String
    Get
        Return m_volume
    End Get
    Set
        m_volume = Value
    End Set
End Property
Private m_volume As String
Public Property quoteVolume() As String
    Get
        Return m_quoteVolume
    End Get
    Set
        m_quoteVolume = Value
    End Set
End Property
Private m_quoteVolume As String
Public Property weightedAverage() As String
    Get
        Return m_weightedAverage
    End Get
    Set
        m_weightedAverage = Value
    End Set
End Property
Private m_weightedAverage As String
End Class

我试图从每一行中检索所有变量。 除了日期我都知道了。 我正在使用以下代码(其中chartInfo = JSON数据):

Dim cdata = JsonConvert.DeserializeObject(Of List(Of ChartData))(chartInfo)
        Dim cResData(cdata.Count - 1) As cChartData
        For i = 0 To cdata.Count - 1
            cResData(i).cUDate = cdata(i).uDate
            cResData(i).cOpen = Convert.ToDouble(cdata(i).open)
            cResData(i).cClose = Convert.ToDouble(cdata(i).close)
            cResData(i).cHigh = Convert.ToDouble(cdata(i).high)
            cResData(i).cLow = Convert.ToDouble(cdata(i).low)
        Next
        Return cResData

显示时,日期返回“空白”值,或不返回任何值,但所有其他值均正确返回。 它是第一个值,所以我想知道它是否与它有关。

任何帮助是极大的赞赏。

当可以序列化属性时,JSON序列化器将其保留为空。

因此,您的JSON中的日期为空或为null,或者它们是.NET默认无法序列化的DateFormat。

在您发布的JSON中,日期字段是数字格式,例如“ 1438992000”,表示它是时间戳。

此外,字段名称为'date',但您已将属性定义为uDate 为了使序列化起作用,除非覆盖默认的序列化,否则属性名称必须与JSON密钥匹配。 更改定义,如下所示,它将序列化:

    Public Property [date] As String
    Get
        Return m_date
    End Get
    Set
        m_date = Value
    End Set
End Property

您为uDate属性获得“空”值的uDate是,porperty名称应匹配才能成功进行反序列化。

您可以更改属性名称来满足此规则。 但是,如果您希望按原样将属性名称保留在类中,则可以将JsonPropertyAttribute用于json名称。

Public Class ChartData

    <JsonProperty("date")>
    Public Property uDate As String

    <JsonProperty("high")>
    Public Property high As String

End Class

使用属性,可以为不同的代码环境使用不同的命名约定。 例如,.NET中的“ PascalCase”和JSON中的“ camelCase”

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM