在处理程序中将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反序列化为Object

您的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。这完全取决于调用者期望的响应类型(您还没有指定)。