VB.NET,关键字作为变量名
VB.NET, keywords as variable names
我必须将一些 json 数据字符串反序列化为结构。
问题是数据名称与 VB 关键字冲突,而在 C# 中并非如此。
这是 json 字符串:
{"id":2526068,"date":"2019-07-21T19:15:17.4468196+02:00","error":""}
有问题的名字显然是"date"和"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 中没有。在这里做什么?
我没有发现你的反序列化有任何问题。你的代码对我有用!
但也许您应该解决几个潜在问题。不要对 class 级别字段使用 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")
我必须将一些 json 数据字符串反序列化为结构。 问题是数据名称与 VB 关键字冲突,而在 C# 中并非如此。
这是 json 字符串:
{"id":2526068,"date":"2019-07-21T19:15:17.4468196+02:00","error":""}
有问题的名字显然是"date"和"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 中没有。在这里做什么?
我没有发现你的反序列化有任何问题。你的代码对我有用!
但也许您应该解决几个潜在问题。不要对 class 级别字段使用 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")