0

所以这就是发生的事情:我得到了这个 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 之后的 MessageBox 从未出现过……我在这里缺少什么?

事实上,我什至可以在 JsonCONvert 之后下一个断点,它不会被触发。发生了什么?

谢谢你。

4

2 回答 2

2

我认为您在反序列化时会遇到异常。您可以使用此站点并将您的 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());
于 2013-09-09T13:04:42.860 回答
0

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

也许您可以用“try-catch”块包围您的代码以捕获异常。

于 2013-09-09T13:05:34.513 回答