在处理程序中将Json反序列化为Object

时间:2013-01-04 16:17:43

标签: c# json handler deserialization

我有一个简单的课程:

public class site
        {
            public string URL { get; set; }
        }

存在于http处理程序中。目前我将json发布到此处理程序并尝试反序列化以从字符串中获取URL。然而,我遇到了反序列化部分的问题。

我有一个字符串“jsonString”,其json的格式如下:

[{"URL":"http://www.google.com/etc/"}]

以下是我反序列化的代码:

JavaScriptSerializer jsonSerializer = new JavaScriptSerializer();

        string jsonString = String.Empty;

        HttpContext.Current.Request.InputStream.Position = 0;
        using (StreamReader inputStream = new StreamReader(HttpContext.Current.Request.InputStream))
        {
            jsonString = inputStream.ReadToEnd();
        }

        site currSite = new site();
        currSite = jsonSerializer.Deserialize<site>(jsonString);

        //set response types
        HttpContext.Current.Response.ContentType = "application/json";
        HttpContext.Current.Response.ContentEncoding = Encoding.UTF8;


       //send response 
       HttpContext.Current.Response.Write(jsonSerializer.Serialize(currSite.URL));  

然后我尝试使用currSite.URL发送响应但是它失败了。我在这里错过了什么?我有理由相信它是在反序列化部分,因为如果我发送一个jsonString而不是currSite.URL的响应它将起作用。

2 个答案:

答案 0 :(得分:4)

您的json字符串显示它是一个数组,而不是一个实体。您应该将其反序列化为:

var result = jsonSerializer.Deserialize<site[]>(jsonString);

result[0].Url应包含您要查找的内容。

<强>更新

添加示例代码:

 string json = @"[{""URL"":""http://www.google.com/etc/""}]";

 JavaScriptSerializer js = new JavaScriptSerializer();
 var result = js.Deserialize<site[]>(json);
 Console.WriteLine(result[0].URL);

打印:     http://www.google.com/etc/

答案 1 :(得分:0)

如果您只是尝试将URL作为响应发送回来(只是字符串),则无需序列化该值。只需将currSite.URL传递给Write方法。

否则,我猜你应该为响应而不仅仅是URL序列化整个currSite对象。这完全取决于调用者期望的响应类型(您尚未指定)。