使用动态/匿名对象和JSON.NET

时间:2015-01-02 22:22:02

标签: dynamic anonymous-types

.NET 4.0; VS 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);时,调试器只存在该方法并返回调用过程。不会抛出任何错误。如果删除了前导和尾随方括号,则会遇到与第二个示例中的结果类似的另一个运行时错误。

因此。不知道在这一点上转向何处。好像我们想做的事情非常简单,这让我觉得我错过了一些明显的东西。

1 个答案:

答案 0 :(得分:0)

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