在处理程序中将Json反序列化为Object
本文关键字:反序列化 Object Json 处理 程序 | 更新日期: 2023-09-27 17:50:38
我有一个简单的类:
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。
您的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/
如果您只是试图将URL作为响应(只是字符串)发回,则不需要序列化值。只需将currSite.URL
传递给Write
方法。
否则,我猜您应该为响应序列化整个currSite
对象,而不仅仅是URL。这完全取决于调用者期望的响应类型(您还没有指定)。