从JSON读取,数据未显示

时间:2012-09-11 04:08:49

标签: c# javascript asp.net json webforms

当我尝试从javascript访问json中的元素时,我遇到了这个奇怪的问题。我从这样的网址中撤回了一个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);

但是当我在html代码中从javascript访问这个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);
当我使用解析后的值时,

不返回任何内容。 :(

以下是通过c#运行序列化程序后获得的json输出(response.write)的示例,

请帮助我这个..我似乎无法在这里找到问题。

编辑:

如果它有帮助,fiollowing是json字符串,我直接从服务器进行任何序列化,

由于所有者请求,该问题的几个内容已被删除

2 个答案:

答案 0 :(得分:3)

你看到的是有多个JSON序列化数据。您从远程服务器检索了JSON,然后JSON使用JavaScriptSerializer对其进行了第二次编码。这是我在ASMX ScriptServices的上下文中写的一篇文章,它更详细地解释了:http://encosia.com/asp-net-web-services-mistake-manual-json-serialization/。你的情况并不完全相同,但最终的结果是。

删除JavaScriptSerializer代码并返回您检索到的JSON字符串(sjson),而不是第二次序列化。

答案 1 :(得分: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>