【问题标题】:Function never runs when using Newtonsoft.Json to parse Json使用 Newtonsoft.Json 解析 Json 时函数永远不会运行
【发布时间】:2018-04-17 04:23:40
【问题描述】:

我正在使用 NewtonSoft.Json 尝试解析从 C# 网站获得的 Json 响应。问题来了:

protected async override Task<bool> DoInBackground() {
    var json = await GetJson();
    return true;
}

GetJson() 负责从网站获取响应并返回作为 Json 响应的字符串。 DoInBackground() 是自定义 AsyncTask 类的一部分,该类在后台处理正在运行的任务。

上面的代码运行得很好。如果我在函数内的第一行放置一个断点,它会停在那里并允许我单步执行并检查下载的 Json 是否正确。

然而,下面的代码永远不会执行。一旦我从 Newtonsoft.Json 引用任何内容,函数就会停止执行。不会到达函数内部的断点。

protected async override Task<bool> DoInBackground() {
    var json = await GetJson();
    dynamic jsonObject = JObject.Parse(json);
    return true;
}

我做错了什么?

编辑:我应该提到DoInBackground() 函数在其他不使用Newtonsoft.Json 的类中完美运行。这是我需要从服务器获取 Json 的第一类。

编辑:为了测试代码是否在没有遇到断点的情况下执行,我尝试了以下但没有输出。

protected async override Task<bool> DoInBackground() {
    var json = await GetJson();

    Debug.WriteLine("before");
    dynamic jsonObject = JObject.Parse(json);
    Debug.WriteLine("after");

    return true;
}

【问题讨论】:

  • 你有什么错误吗?
  • @YogeshHShenoy 没有错误。该函数根本不执行。
  • 你希望你的函数返回什么?目前它正在返回布尔值,您希望它返回字符串吗?然后你需要改变函数的返回类型并从中返回适当的值
  • @ChetanRanpariya 返回值只是一个布尔值,表示DoInBackground() 是否成功执行。为什么断点不停止?
  • @sjbhalli 在调用函数之前是否命中断点?

标签: c# xamarin dynamic json.net async-await


【解决方案1】:

在您的情况下,您可以简单地清除解决方案并重建它。该应用程序应该运行良好,因为您的代码没有问题。

只是 Visual Studio 使用的是在您对代码进行最终修改之前已经构建的应用程序。

在您的情况下,可能现有的构建副本没有添加 Newtonsoft.Json。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-16
    • 2012-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-31
    相关资源
    最近更新 更多