【问题标题】:Working with dynamic/anonymous objects and JSON.NET使用动态/匿名对象和 JSON.NET
【发布时间】:2015-01-02 22:22:01
【问题描述】:

.NET 4.0;与 2010 年相比。

我们正在使用不提供 WSDL 的 Web 服务。返回的数据并不是特别复杂,所以我们认为我们将使用动态/匿名类型。以下是从服务方法之一返回的 JSON 示例(此字符串已使用 JSONLint 验证):
[ { “价值”:“AAA” }, { “价值”:“BBB” }, { “价值”:“CCC” }, { “价值”:“DDD” }, { “价值”:“EEE” }, { “价值”:“FFF” } ]

尝试使用:

 dynamic respDyn = JsonConvert.DeserializeObject(jsonStringAbove);

在这种情况下,不会引发任何错误,但在尝试访问 resp 变量时,Visual Studio 调试器会报告“当前上下文中不存在名称 'resp'”。

接下来尝试 LINQ:

var respLinq = JObject.Parse(jsonStringAbove);

这会导致运行时错误:从 JsonReader 读取 JObject 时出错。当前 JsonReader 项不是对象:StartArray。路径'',第 1 行,位置 1。

找到this article根据JSON的格式推荐不同的解析方法:

if (jsonStringAbove.StartsWith("["))
{
   var arr = JArray.Parse(jsonStringAbove);
}
else
{
    var obj = JObject.Parse(jsonStringAbove);
}

当var arr = JArray.Parse(jsonStringAbove); 被命中时,调试器简单地存在方法并返回调用过程。没有错误被抛出。如果删除前导方括号和尾随方括号,则会遇到另一个与第二个示例中的结果类似的运行时错误。

所以。目前不知道该转向哪里。似乎我们正在尝试做的事情非常简单,这让我觉得我错过了一些明显的东西。

【问题讨论】:

    标签: dynamic anonymous-types


    【解决方案1】:

    不知道为什么,但解决方案是将我的变量声明为类中的字段。我正在使用的方法的本地变量根本不起作用。一旦声明为类范围的变量,代码就会按预期运行。很奇怪。我怀疑这个问题可能特定于我的 VS 环境和/或解决方案配置,因为它似乎没有发生在其他任何人身上。祝我好运。

    【讨论】:

      猜你喜欢
      • 2013-11-23
      • 1970-01-01
      • 2021-08-01
      • 2019-04-15
      • 2014-02-02
      • 2023-03-15
      • 1970-01-01
      • 2016-04-21
      • 2023-03-05
      相关资源
      最近更新 更多