2017-07-07 16 views
0

This Dataを構造体に変換しようとしています。VB.NETでJSONデータを変換する

私はそうのような構造を持っていますように

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 

私はそれぞれの行からすべての変数を取得しようとしています。私は日付以外のすべてを取得します。表示された日付は、「ブランク」値、または何もを返しますが、他のすべての値が正しく返さ

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 

:私は、次のコードを(chartInfo = JSONデータ)を使用しています。それは最初の価値なので、それがそれと関係があるのだろうかと思っています...

何か助けていただければ幸いです。

答えて

0

プロパティをシリアル化できるときは、JSONシリアライザによってヌルのままになります。

JSONの日付が空であるか、nullであるか、または.NETがデフォルトでシリアル化できないDateFormatに含まれています。

投稿されたJSONの日付フィールドは、タイムスタンプを意味する '1438992000'などの数値形式です。

また、フィールド名は「日付」ですが、プロパティをuDateと定義しています。シリアライズを有効にするには、デフォルトのシリアライゼーションをオーバーライドしない限り、プロパティ名がJSONキーと一致する必要があります。次のように定義を変更し、それがシリアライズされます:

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

メインのポストにハイパーリンクとして使用されているJSONデータを投稿しました.... –

+0

申し訳ありません。私の答えを更新しました。 –

+0

問題は「日付」として指定されていましたが、[日付]を使用すると完全に機能します。どうもありがとうございます! –

0

あなたは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」

関連する問題