将Json响应反序列化为对象

4

我有以下的JSON响应,我试图将其反序列化为C#对象,但我一直收到错误信息。 JSON响应:

"\"{\\\"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);

我收到的错误信息:
无法将值“{"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"}}"转换为类型'SummaryOBJ'。路径'',第1行,第383个位置。

尝试将@params属性类型从string[]更改为List<string> - vasily.sib
3
我已经尝试使用你的代码和JSON进行复现,但一切都按预期工作,没有错误。JSON.NET 足够聪明,可以为你转换http_code成字符串,所以不会是那个问题。这里有一个可用的 dotnetfiddle - Kirk Larkin
2
非再现性。显示实际代码和实际的JSON字符串。不要为问题简化您的JSON。 - CodeCaster
2
如果可能的话,你需要查看服务器端发送的响应。它似乎发送的是一个字符串而不是一个对象——它将其编码为JSON然后再次进行编码。否则,你将不得不在自己的代码中进行双重反序列化(呸)。 - Kirk Larkin
2
@Kirk Larkin,这就是问题所在。“你需要查看服务器端发送的响应。它似乎发送的是一个字符串而不是一个对象——它将其编码为JSON,然后再进行编码。否则,在您自己的代码中,您需要进行双重反序列化。”请发布此答案,以便我可以标记它为正确。 - focus
显示剩余3条评论
3个回答

3

http_code 应当是 int 类型而非 string 类型


3
这里从服务器返回的响应是一个字符串的 JSON 表示形式,它本身是您期望的对象的 JSON 表示形式。服务器首先将对象编码为 JSON,然后再次将序列化的 JSON 字符串进行 JSON 编码。已经在评论中确认解决此问题的方法是修复服务器,仅对数据进行一次编码,所以我在这里完整地写出了这个答案。

-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 是正确的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接