我发布的API可能会返回以下两种格式的JSON字符串中的一种:
{
"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条件来读取结果,因为语法或检索key:value对于每个JSON字符串都是不同的,并且没有其他标志可以触发非此即彼。所以我使用的代码是:
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帖子,它会返回第二个JSON,它会被TRY语句正确解析,如果没有,它会抛出一个&#34;未找到的键&#34;错误并解析CATCH语句中返回的字符串(第一个JSON示例)。显然这是可怕的代码,但我想不出另一种方法来做到这一点,我想知道是否有人有建议? (请?)
提前完成。
答案 0 :(得分:1)
如何使用每个返回类型的所有属性反序列化对象的响应,然后只检查值?
public class ReturnObject
{
public YourModel Model {get;set;}
public ResultObject ResponseResult {get;set;}
public int? MessageType {get;set;}
public string Message {get;set;}
}
string result = eml.PostData("API/Save", dataJSON.ToString());
var returnresult = new JavaScriptSerializer().Deserialize<ReturnObject>(result);
{
if(returnresult.MessageType.HasValue)
{
var messageType = returnResult.MessageType.Value;
etc etc.
}
}