1

我有以下功能。
当我调用getQueryObject(jsonString)它时,它使 coll 解析对象然后返回。分配给jsonObject没有工作。当我开始对jsonObjectbariable 进行操作时,它的值nothing。我运行 Debug 并遵循代码,并且jsonObjectingetQueryObject没有失败。return 表示它返回对象。

我是 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后,我​​开始收到错误消息。Option Strict On 不允许从“Newtonsoft.Jsont.Linq.Token 到 Newtonsoft.Json.Linq.JObject”的隐式转换。

我不知道我在哪里进行任何类型的转换。

4

2 回答 2

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都打开,编译器会为你发现这个问题。在项目的属性中更改这些设置。永远不要Option Explicit在关闭的情况下在 VB.NET 中编写代码。意想不到的事情发生。

正在发生的事情是 VB.NET 允许您使用该jsonObject变量而无需声明它。编译器只是自动将其初始化到Nothing幕后,这是默认值。这是一个很简单的错误,因为这是一种方法中变量的名称。但它并没有按预期工作,因为它不是这个方法中的变量名。只要你Option Explicit有事,VB.NET 就不会警告你,并且会愉快地编译错误的代码。

(请注意,我还遵循推荐的 .NET 编码约定 CamelCasing 所有方法名称。这意味着它们应该以大写字母开头,而不是小写字母。只有局部变量和参数应该是 pascalCased (初始小写案子)。)

于 2011-05-20T16:21:22.480 回答
0
Public Function getInformation(jsonString as string) as string
    Dim jsonObj As JObject
    jsonObject = getQueryObject(jsonString)
    'Operate on object here.
End Function

jsonObject 是全局声明的吗?

于 2011-05-20T16:20:00.107 回答