VB.NET,关键字作为变量名

VB.NET,关键字作为变量名,vb.net,json-deserialization,jsonconvert,Vb.net,Json Deserialization,Jsonconvert,我必须将一些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

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

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

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

Structure-reqjson
作为字符串的公共id
公共[日期]作为字符串
公共[错误]为字符串
端部结构
除了自己添加json字符串之外,我在这里不做任何更改

公共共享子foo()
Dim jsonstr=“{”id”“:2526068”“日期”“:”“2019-07-21T19:15:17.4468196+02:00”“错误”“:”“”
Dim idnum的长度=0
Dim sldate As String=“”
如果不是String.IsNullOrEmpty(jsonstr),那么
Dim r作为reqjson=JsonConvert.DeserializeObject(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
作为字符串的公共id
公共[日期]作为日期
公共[错误]为字符串
端部结构
这使您的原始代码正常工作

sldate = r.date.ToString("dd.MM.yyyy. hh:mm:ss.fff")

我看你的反序列化没有任何问题。你的代码对我有用

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

Structure-reqjson
作为字符串的公共id
公共[日期]作为字符串
公共[错误]为字符串
端部结构
除了自己添加json字符串之外,我在这里不做任何更改

公共共享子foo()
Dim jsonstr=“{”id”“:2526068”“日期”“:”“2019-07-21T19:15:17.4468196+02:00”“错误”“:”“”
Dim idnum的长度=0
Dim sldate As String=“”
如果不是String.IsNullOrEmpty(jsonstr),那么
Dim r作为reqjson=JsonConvert.DeserializeObject(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
作为字符串的公共id
公共[日期]作为日期
公共[错误]为字符串
端部结构
这使您的原始代码正常工作

sldate = r.date.ToString("dd.MM.yyyy. hh:mm:ss.fff")

Dim MyNamedDate As String
反序列化为
MyNamedDate
,序列化为
date
。可能,使用类而不是结构。你应该使用一个类(我改变主意:)哇,这很有效。非常感谢你,吉米!请看下面的答案。有些事情你需要注意(顺便说一句,使用一个类,可能是公共成员)。关于这个主题的一些有趣的阅读:
Dim MyNamedDate As String
反序列化到
MyNamedDate
,序列化到
date
。可能,使用类而不是结构。你应该使用一个类(我改变主意:)哇,这很有效。非常感谢你,吉米!请看下面的答案。有一些事情你需要注意(顺便说一句,使用一个类,可能。与公众成员)。关于这个主题的一些有趣的阅读玛:这实际上也适用于我现在。似乎我的输入数据有些错误。也和dim一起工作!很抱歉类型不匹配。当我准备这个示例时,它会出现,否则我会打开option strict。谢谢。您可以反序列化到
DateTimeOffset
。比约会好多了。它将保留原始日期的偏移量。吉米,别听我这么说。但也可以将Dim[date]用作DateTimeOffset。如果使用标准的国际日期格式:
2019-07-21T19:15:17.4468196+02:00
,如果不使用
DateTimeOffset
,原始偏移量将丢失。再次序列化时,将添加本地偏移,这可能(将)与原始偏移不同。使用不同于本地偏移量的偏移量更改当前偏移量
+2.00
。你会明白的。知道这一点很有用。再次感谢你!这对我现在也很管用。似乎我的输入数据有些错误。也和dim一起工作!很抱歉类型不匹配。当我准备这个示例时,它会出现,否则我会打开option strict。谢谢。您可以反序列化到
DateTimeOffset
。比约会好多了。它将保留原始日期的偏移量。吉米,别听我这么说。但也可以将Dim[date]用作DateTimeOffset。如果使用标准的国际日期格式:
2019-07-21T19:15:17.4468196+02:00
,如果不使用
DateTimeOffset
,原始偏移量将丢失。再次序列化时,将添加本地偏移,这可能(将)与原始偏移不同。使用不同于本地偏移量的偏移量更改当前偏移量
+2.00
。你会明白的。知道这一点很有用。再次感谢你!