我有以下功能。
当我调用getQueryObject(jsonString)
它使coll解析对象然后返回。
jsonObject
的分配无效。当我开始对jsonObject
bariable进行操作时,它的值为 nothing 。
我运行Debug并遵循代码,jsonObject
中的getQueryObject
没有失败。并返回说它返回对象。
我是VB的新手还有我缺少的东西吗?
Public Function getInformation(jsonString as string) as string
Dim jsonObject As JObject
jsonObject = getQueryObject(jsonString)
'Operate on object here.
End Function
Private Function getQueryObject(jsonString as string) As JObject
Dim jsonObject As JObject
Try
jsonObject = JObject.Parse(jsonString)
Catch ex As Exception
jsonObject = New JObject
End Try
Return jsonObject
End Function
更多信息。我打开选项严格后,我开始收到错误消息。 Option Strict On禁止从'Newtonsoft.Jsont.Linq.Token到Newtonsoft.Json.Linq.JObject'的隐式转换。
我不知道我在哪里进行任何类型的转换。
答案 0 :(得分:2)
问题是您在getInformation
函数中使用了错误的变量名称。
将代码更改为如下所示:
Public Function GetInformation(jsonString as string) as string
Dim jsonObj As JObject
jsonObj = GetQueryObject(jsonString) // Change the name of this variable
// to match the declaration above it.
'Operate on object here.
End Function
甚至更简单,在同一行中声明并初始化变量:
Public Function GetInformation(jsonString as string) as string
Dim jsonObj As JObject = GetQueryObject(jsonString)
'Operate on object here.
End Function
如果你编译你用Option Explicit
和Option Strict
同时打开在代码,编译器会抓住这个问题你。在项目的属性中更改这些设置。 从不 在VB.NET中编写代码并关闭Option Explicit
。意外的事情发生了。
正在发生的事情是VB.NET允许您使用jsonObject
变量而不会声明它。编译器只是在幕后自动将其初始化为Nothing
,这是默认值。这是一个很简单的错误,因为这是其他方法中变量的名称。但它没有按预期工作,因为它不是 this 方法中变量的名称。只要你Option Explicit
关闭,VB.NET就不会警告你,并且幸福地编译错误的代码。
(请注意,我也跟所有驼峰规则方法名的建议的.NET编码约定。这意味着,他们应该用的资本的信,而不是一个小写字母开头。只有本地变量和参数应该是pascalCased(初始小写)。)
答案 1 :(得分:0)
Public Function getInformation(jsonString as string) as string
Dim jsonObj As JObject
jsonObject = getQueryObject(jsonString)
'Operate on object here.
End Function
jsonObject是全局声明的吗?