在WP7上使用JSON.net反序列化JSON

时间:2011-04-29 15:48:15

标签: c# windows-phone-7 json.net

我正在尝试使用JSON.Net从Web服务中获取一些JSON数据。在解析json数据时,我得到的错误是一个意外的字符。我正在使用的代码如下:

HttpWebRequest request;
WebResponse response;

private void btnGet_Click(object sender, RoutedEventArgs e)
{
    request = WebRequest.Create(@"http://http://domain.com/test/question.php") as HttpWebRequest;
    request.BeginGetResponse(AfterRequest, null);
}

private void AfterRequest(IAsyncResult result)
{
    response = request.EndGetResponse(result);
    using (StreamReader sd = new StreamReader(response.GetResponseStream()))
    {
        string resultString = sd.ReadToEnd();

        Dictionary<string, string> values = JsonConvert.DeserializeObject<Dictionary<string, string>>(resultString);
        response.Close();
        MessageBox.Show(values["Question"]);
    }
}

我正在尝试反序列化的数据是:

{"Question":"How old am i?","A":"20","B":"23","C":"25","D":"26","Z":"D"}

此数据通过php / mysql输出。如果是我的代码或JSON数据无效,那么有什么想法吗?

感谢 编辑:我已经更新了我正在尝试反序列化的数据,现在看起来像这样; { "Question": "How old am i?", "Answers": { "A": "24", "B": "25", "C": "26", "D": "27" }, "Answer": "B" }

1 个答案:

答案 0 :(得分:1)

您的JSON是“有效的”,但它的结构很差,无法获得您正在寻找的结果。我将JSON的格式更改为:

{
 "Question":"How old am i?",
 "Answers":[
   "A":"20",
   "B":"23",
   "C":"25",
   "D":"26",
   "Z":"D"]
}

通过将您可能的答案移动到一个数组中,您可以更容易地将它们与问题分开,并且还可以将其扩展为包含诸如“CorrectAnswer”之类的项目:“B”