2012-09-11 37 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 –