首页 > 解决方案 > VB.NET,关键字作为变量名

问题描述

我必须将一些 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 中。在这里做什么?

标签: vb.netjson-deserializationjsonconvert

解决方案


我认为您的反序列化没有任何问题。你的代码对我有用!

但也许你应该解决几个潜在的问题。不要Dim用于类级别字段。使用PublicPrivate

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")

推荐阅读