我有一个简单的课程:
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的响应它将起作用。
答案 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);
答案 1 :(得分:0)
如果您只是尝试将URL作为响应发送回来(只是字符串),则无需序列化该值。只需将currSite.URL
传递给Write
方法。
否则,我猜你应该为响应而不仅仅是URL序列化整个currSite
对象。这完全取决于调用者期望的响应类型(您尚未指定)。