【发布时间】: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); 被命中时,调试器简单地存在方法并返回调用过程。没有错误被抛出。如果删除前导方括号和尾随方括号,则会遇到另一个与第二个示例中的结果类似的运行时错误。
所以。目前不知道该转向哪里。似乎我们正在尝试做的事情非常简单,这让我觉得我错过了一些明显的东西。
【问题讨论】: