2013-01-04 83 views
3

對象我有一個簡單的類:反序列化JSON來在處理器

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的響應,它將起作用。

+2

什麼是您收到並在哪一行的錯誤? –

+0

它是如何失敗? – Pete

+0

你可以在反序列化之後調試並看到currSite被填充數據嗎? – iMortalitySX

回答

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); 

打印: http://www.google.com/etc/

+0

這讓我走上了正確的道路,最終我改變了發佈到單個實體的JSON,並且我的代碼也能正常工作。 – BlueBird

0

如果您只是試圖發回URL作爲響應(只是字符串),則無需序列化該值。只需將currSite.URL傳遞給Write方法即可。

否則,我猜你應該序列化整個currSite對象的響應,而不僅僅是URL。這一切都取決於調用者期待什麼樣的響應(您沒有指定)。