【问题标题】:Deserialize Json to Object in a handler在处理程序中将 Json 反序列化为 Object
【发布时间】:2013-01-04 16:17:43
【问题描述】:

我有一个简单的课程:

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 的响应,它将起作用。

【问题讨论】:

  • 您收到的错误是什么,在哪一行?
  • 反序列化后是否可以调试看到currSite被填充数据?

标签: c# json handler deserialization


【解决方案1】:

您的 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/

【讨论】:

  • 这让我走上了正确的道路,我最终更改了发布到单个实体的 json 并且我的代码有效。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2021-06-14
    • 1970-01-01
    • 2016-09-25
    • 2018-01-09
    • 1970-01-01
    • 2014-01-10
    • 2019-07-03
    • 2020-02-19
    • 2011-08-20
    相关资源
    最近更新 更多