.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);
时,调试器只存在该方法并返回调用过程。不会抛出任何错误。如果删除了前导和尾随方括号,则会遇到与第二个示例中的结果类似的另一个运行时错误。
因此。不知道在这一点上转向何处。好像我们想做的事情非常简单,这让我觉得我错过了一些明显的东西。
答案 0 :(得分:0)
不确定原因,但解决方法是将我的变量声明为类中的字段。我正在使用的方法的局部变量根本不起作用。一旦声明为类范围的变量,代码就会按预期运行。很奇怪。我怀疑这个问题可能特定于我的VS环境和/或解决方案配置,因为它似乎没有与其他任何人一起发生。幸运的我。