gpt4 book ai didi

c# - 反序列化 JSON 的更好方法?

转载 作者:太空狗 更新时间:2023-10-29 21:58:13 24 4
gpt4 key购买 nike

我正在发布到一个可能返回以下 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 字符串的语法或检索键:值都是不同的,并且没有其他标志可以触发非此即彼。所以我使用的代码是:

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 post,它返回第二个 JSON,它被 TRY 语句正确解析,如果没有,它会抛出一个“key not found”错误,并在 CATCH 语句(第一个 JSON 示例)中解析返回的字符串。显然这是可怕的代码,但我想不出另一种方法来做到这一点,我想知道是否有人有建议? (请问?)

提前致谢。

最佳答案

如何使用每个返回类型的所有属性反序列化对对象的响应,然后只检查值?

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.
}

}

关于c# - 反序列化 JSON 的更好方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18154064/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com