我有下面的json响应,我试图将其反序列化为c#对象,但是我总是遇到错误。 杰森回应:
"\"{\\\"method\\\":\\\"https://hereisalink.com\\\",\\\"http_method\\\":\\\"POST\\\",\\\"http_code\\\":900,\\\"error_code\\\":\\\"OK\\\",\\\"error_msg\\\":\\\"\\\",\\\"params\\\":[],\\\"data\\\":{\\\"summaryUrl\\\":\\\"https://sureyurl.com/?firstparam=123&secondparam=myemail%40gmail%2Ecom\\\",\\\"my_id\\\":1234,\\\"myemail\\\":\\\"theemail@gmail.com\\\",\\\"result\\\":\\\"yes\\\"}}\""
我的C#对象:
public class SummaryOBJ
{
public string method { get; set; }
public string http_method { get; set; }
public string POST { get; set; }
public string http_code { get; set; }
public string error_code { get; set; }
public string error_msg { get; set; }
public string[] @params { get; set; }
public Thesummary data { get; set; }
}
public class Thesummary
{
public string summaryUrl { get; set; }
public int my_id { get; set; }
public string myemail { get; set; }
public string result { get; set; }
}
要反序列化的C#代码:
//var myresp is the above json response i mention
var myresult = JsonConvert.DeserializeObject<SummaryOBJ>(myresp);
我得到的错误:
转换值时出错 “ {”方法“:” https://hereisalink.com“,” http_method“:” POST“,” http_code“:900,” error_code“:” OK“,” error_msg“:”“,” params“:[], “ data”:{“ summaryUrl”:“ https://sureyurl.com/?firstparam=123&secondparam=myemail%40gmail%2Ecom”,“ my_id”:1234,“ myemail”:“ theemail@gmail.com”,“ result”:“是”}}}“ 键入“ SummaryOBJ”。路径”,第1行,位置383。
答案 0 :(得分:3)
http_code
应该是int
而不是string
答案 1 :(得分:3)
这里从服务器返回的响应是字符串的JSON表示形式,它本身就是您期望的对象的JSON表示形式。服务器首先将对象编码为JSON,然后再次将序列化的JSON字符串编码为JSON。
您已经在评论中确认解决方案是将服务器固定为仅对数据进行一次编码。,因此为了完整起见,我在此处写出了这个答案。
答案 2 :(得分:-1)
[
{
"method": "https://hereisalink.com",
"http_method": "POST",
"http_code": 900,
"error_code": "OK",
"error_msg": "",
"params": [],
"data": {
"summaryUrl": "https://sureyurl.com/?firstparam=123&secondparam=myemail%40gmail%2Ecom",
"my_id": 1234,
"myemail": "theemail@gmail.com",
"result": "yes"
}
}
]
返回的json对象应该是这样。看起来您返回的json格式不正确。
您的代码对于DeserializeObject是正确的。