JsonConverter的奇怪行为

本文关键字:JsonConverter | 更新日期: 2023-09-27 18:30:37

所以这是正在发生的事情:我得到了这个json字符串(在使用他们的API将图像上传到imgur之后):

{
    "data": {
        "id": "123456",
        "title": null,
        "description": null,
        "datetime": 1378731002,
        "type": "image/png",
        "animated": false,
        "width": 1600,
        "height": 900,
        "size": 170505,
        "views": 0,
        "bandwidth": 0,
        "favorite": false,
        "nsfw": null,
        "section": null,
        "deletehash": "qZPqgs7J1jddVdo",
        "link": "http://i.imgur.com/123456.png"
    },
    "success": true,
    "status": 200
}

我正在尝试使用 JsonConvert.DeserializeObject 反序列化为字典,如下所示:

richTextBox1.Text = json;
Dictionary<string, string> dic = JsonConvert.DeserializeObject<Dictionary<string, string>>( json );
MessageBox.Show( dic["success"].ToString() );

问题是,我可以在 RichTextBox 上看到 json 字符串,但 jsonConvert 之后的消息框永远不会出现......我在这里错过了什么?

事实上,我甚至可以在 JsonCOnvert 之后放置一个断点,它不会被触发。发生了什么事情?

谢谢。

JsonConverter的奇怪行为

我认为您在反序列化时会出现异常。您可以使用此站点并将您的 json 转换为具体类。

var obj = JsonConvert.DeserializeObject<RootObject>(json);
public class Data
{
    public string id { get; set; }
    public object title { get; set; }
    public object description { get; set; }
    public int datetime { get; set; }
    public string type { get; set; }
    public bool animated { get; set; }
    public int width { get; set; }
    public int height { get; set; }
    public int size { get; set; }
    public int views { get; set; }
    public int bandwidth { get; set; }
    public bool favorite { get; set; }
    public object nsfw { get; set; }
    public object section { get; set; }
    public string deletehash { get; set; }
    public string link { get; set; }
}
public class RootObject
{
    public Data data { get; set; }
    public bool success { get; set; }
    public int status { get; set; }
}

你也可以使用 JObject ,因为它可以实现IDictionary

var dic = JObject.Parse(json);
MessageBox.Show(dic["success"].ToString());

也许你应该尝试使用Dictionary<string, object>,因为值并不总是字符串。当您调用 json 反序列化程序时,似乎有一个例外。

也许你可以用一个"try-catch"块包围你的代码,以便捕获异常。