C# 将Json反序列化到处理程序中的对象

C# 将Json反序列化到处理程序中的对象,c#,json,handler,deserialization,C#,Json,Handler,Deserialization,我有一个简单的课程: public class site { public string URL { get; set; } } 存在于http处理程序中的。目前,我正在将json发布到这个处理程序,并尝试对其进行反序列化,以从字符串中提取URL。然而,我对它的反序列化部分有一个问题 我有一个字符串“jsonString”,其json格式如下: [{"URL":"http://www.google.com/etc/"}] 以下是我的反序

我有一个简单的课程:

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));  
JavaScriptSerializer jsonSerializer=newJavaScriptSerializer();
string jsonString=string.Empty;
HttpContext.Current.Request.InputStream.Position=0;
使用(StreamReader inputStream=newstreamreader(HttpContext.Current.Request.inputStream))
{
jsonString=inputStream.ReadToEnd();
}
站点currSite=新站点();
currSite=jsonSerializer.Deserialize(jsonString);
//设置响应类型
HttpContext.Current.Response.ContentType=“应用程序/json”;
HttpContext.Current.Response.ContentEncoding=Encoding.UTF8;
//发送响应
HttpContext.Current.Response.Write(jsonSerializer.Serialize(currSite.URL));

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

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


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

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

var result = jsonSerializer.Deserialize<site[]>(jsonString);
印刷品:

您收到的错误是什么?在哪一行?您能调试并看到currSite在反序列化后充满数据吗?这让我走上了正确的道路,我最终更改了发布到单个实体的json,我的代码正常工作。
 string json = @"[{""URL"":""http://www.google.com/etc/""}]";

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