2012-09-11 196 views
0

我在嘗試從javascript訪問json中的元素時遇到了這個奇怪的問題。我retreve JSON字符串從像這樣一個URL,從JSON中讀取數據不顯示

 // Create Request 
     HttpWebRequest req = (HttpWebRequest)WebRequest.Create(@"www.someurl.com"); 

     // Create Client 
     WebClient client = new WebClient(); 

     // Assign Credentials 
     client.Credentials = new NetworkCredential("username", "pass"); 

     // Grab Data 
     sjson = client.DownloadString(@"www.someurl.com"); 
     System.Web.Script.Serialization.JavaScriptSerializer oSerializer = new System.Web.Script.Serialization.JavaScriptSerializer(); 
     oSerializer.MaxJsonLength = Int32.MaxValue; 
     sjson = oSerializer.Serialize(sjson); 

但是,當我從JavaScript的HTML代碼中訪問這個sjson變量,它不返回任何東西,但如果我硬編碼,它返回的值,請幫助這一個。我嘗試了很多東西,但沒有奏效。我也嘗試只傳遞retreieved json字符串而不進行序列化,當我這樣做時javascript停止工作。 :(下面是javascript代碼,

<script type="text/javascript"> 
    var jsons = JSON.parse('<%=sjson%>'); 


    function initialize() { 
     alert("hahahahaaa"); 
     document.writeln(jsons.Body[0].RowId.SensorIdValue); 
     //document.writeln(myobject.Body[0].RowId.SensorIdValue); 
    } 
    </script> 

的問題是

document.writeln(myobject.Body[0].RowId.SensorIdValue); 

如果我用myObject的變量返回一個值,但

document.writeln(jsons.Body[0].RowId.SensorIdValue); 

回報沒事的時候我用它解析值:(

以下是json輸出(response.write)的示例我得到了af通過C#運行序列化程序,

請幫助我在這一個..我似乎無法找到問題在這裏。

編輯:

如果它幫忙,fiollowing是JSON字符串我得到直接從服務器不用其他作出任何序列化,

的問題很少有內容已被刪除,由於業主要求

+0

使用'的console.log(jsons)驗證JSON對象的值;' – adatapost

+0

我不知道如何ASP發送編碼的JSON ,但你試圖去掉斜槓? – Guilherme

+0

你正在序列化它兩次!它已經從Web服務下載時已經序列化。 – Nathan

回答

0

您不需要使用Json序列化程序,因爲遠程服務器已經返回一個JSON編碼的字符串,您可以直接在頁面中使用該字符串並避免雙重編碼。

所以:

public string GetJson() 
{ 
    // Create Client 
    using (WebClient client = new WebClient()) 
    { 
     // Assign Credentials 
     client.Credentials = new NetworkCredential("username", "pass"); 

     // Grab Data 
     return client.DownloadString(
      @"www.someurl.com" 
     ); 
    } 
} 

然後:

<script type="text/javascript"> 
    var jsons = <%= GetJson() %>; 
    function initialize() { 
     alert("hahahahaaa"); 
     document.writeln(jsons.Body[0].RowId.SensorIdValue); 
     //document.writeln(myobject.Body[0].RowId.SensorIdValue); 
    } 
</script> 
+0

okey ...謝謝你的回覆..我正在嘗試它:) –

+0

嘿..你的答案是這樣的,這是所有的原因單引號,像這樣'<%=sjson%>'當我clld的C#變量,你的答案指出我在正確的方向,非常感謝你 –

+0

和是相當奇怪的原因相同的原則以前工作。並仍在工作,但不是爲此 –

3

你看到的是雙倍的JSON序列化數據。您從遠程服務器檢索到JSON,然後JSON使用JavaScriptSerializer對其進行二次編碼。這是我在ASMX ScriptServices環境中寫的一篇文章,更詳細的解釋如下:http://encosia.com/asp-net-web-services-mistake-manual-json-serialization/。你的情況並不完全一樣,但最終的結果是。

刪除JavaScriptSerializer代碼並返回檢索到的JSON字符串(sjson)而不是第二次序列化它。

+0

okey ..我想你的想法:) il發回我的結果:)非常感謝你 –

+0

嗨,我試圖只有sjson變量沒有序列化它第二次..sam eresult,沒有輸出給出我編輯代碼的字符串url返回..你有什麼想法? –

+0

和sjson被定義爲公共stirng –