1

一部のjsonデータ文字列を構造に逆シリアル化する必要があります。問題は、データ名が VB キーワードと競合することです。これは C# では当てはまりません。

これはjson文字列です:

{"id":2526068,"date":"2019-07-21T19:15:17.4468196+02:00","error":""}

問題のある名前は明らかに「日付」と「エラー」です。どこかで、そのような変数には [] を付ける必要があることがわかりました。しかし、これは私にはうまくいきません。
これが私のコードです:

Structure reqjson
    Dim id As String
    Dim [date] As String
    Dim [error] As String
End Structure

Dim idnum As Long = 0
Dim sldate As String = ""
If Not String.IsNullOrEmpty(jsonstr) Then
        Dim r As reqjson = JsonConvert.DeserializeObject(Of reqjson)(jsonstr)
        idnum = CLng(r.id)
        sladate = r.date.ToString("dd.MM.yyyy. hh:mm:ss.fff")
End If

問題は、VB が許可していない名前と同じ名前を持っていない場合、デシリアライザーがデータをデシリアライズできないことです。C# では、この宣言は有効です。

struct reqjson{
string id;
string date;
string error;
};

しかし、VB.NET にはありません。ここで何をしますか?

4

1 に答える 1

3

逆シリアル化に問題はありません。あなたのコードは私のために働きます!

しかし、おそらくいくつかの潜在的な問題に対処する必要があります。Dimクラス レベルのフィールドには使用しないでください。Publicまたは_Private

Structure reqjson
    Public id As String
    Public [date] As String
    Public [error] As String
End Structure

そして、json文字列を自分で追加する以外は、ここでは何も変更していません

Public Shared Sub foo()
    Dim jsonstr = "{""id"":2526068,""Date"":""2019-07-21T19:15:17.4468196+02:00"",""error"":""""}"
    Dim idnum As Long = 0
    Dim sldate As String = ""
    If Not String.IsNullOrEmpty(jsonstr) Then
        Dim r As reqjson = JsonConvert.DeserializeObject(Of reqjson)(jsonstr)
        idnum = CLng(r.id)

しかし、あなたはやっていString.ToString()ます。代わりにこれを試してください

        sldate = Date.Parse(r.date).ToString("dd.MM.yyyy. hh:mm:ss.fff")
    End If
End Sub

または、さらに良いことに、構造体で実際の日付を使用します

Structure reqjson
    Public id As String
    Public [date] As Date
    Public [error] As String
End Structure

これにより、元のコードが機能します

sldate = r.date.ToString("dd.MM.yyyy. hh:mm:ss.fff")
于 2019-07-23T21:02:50.667 に答える