【发布时间】:2013-08-09 19:15:37
【问题描述】:
我发布到可能返回以下 2 种 JSON 字符串格式之一的 API:
{
"MessageType": 6,
"Message": "Unable to SAVE new record. Invalid posted data."
}
或
{
"Model": {
"Id": "1-6Q0RZ9",
...
},
"ResponseResult": {
"MessageType": 10,
"Message": "Successfully saved, Record Id = 1-6Q0RZ9"
}
}
我需要从 MessageType 检索结果并尝试了我能想到的每个 if 条件来读取结果,因为每个 JSON 字符串的语法或检索 key:value 都不同,并且没有其他标志可以触发非此即彼。所以我使用的代码是:
string result = eml.PostData("API/Save", dataJSON.ToString());
var returnresult = new JavaScriptSerializer().Deserialize<dynamic>(result);
try {
var responseresults = returnresult["ResponseResult"];
rr = responseresults["MessageType"];
rrtxt = responseresults["Message"];
} catch (Exception ex) {
rr = returnresult["MessageType"];
rrtxt = returnresult["Message"];
}
效果很好。如果存在有效的 Db 帖子,则返回由 TRY 语句正确解析的第二个 JSON,如果没有,则抛出“未找到密钥”错误并在 CATCH 语句中解析返回的字符串(第一个 JSON 示例)。显然这是可怕的代码,但我想不出另一种方法来做到这一点,我想知道是否有人有建议? (请?)
提前感谢。
【问题讨论】:
-
我强烈推荐Json.NET
-
我在使用 JSON.Net 时遇到了类似的问题,在我的情况下,没有办法知道你会得到哪个字符串。
-
虽然 JSON.Net 也会有同样的问题,但它的性能要比您使用的 JSON 解析器好得多。
-
我很欣赏这个建议,但我仍然需要解决问题......
-
@RickBailly 下面的解决方案不适合您吗?