所以这就是发生了什么:我得到了这个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反序列化为Dictionary,如下所示:
richTextBox1.Text = json;
Dictionary<string, string> dic = JsonConvert.DeserializeObject<Dictionary<string, string>>( json );
MessageBox.Show( dic["success"].ToString() );
事情是,我可以看到RichTextBox上的json字符串,但JsonConvert之后的MessageBox从未出现......我在这里缺少什么?
事实上,我甚至可以在JsonCOnvert之后设置一个断点,它不会被触发。发生了什么事?
谢谢。
答案 0 :(得分:2)
我认为在反序列化时你会遇到异常。您可以使用this site并将您的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());
答案 1 :(得分:0)
也许你应该尝试使用Dictionary<string, object>
,因为值并不总是字符串。
当你调用json反序列化器时,似乎有一个例外。
也许你可以使用“try-catch”块来包围你的代码,以便捕获异常。