【问题标题】:Reading C# dictionary in Javascript在 Javascript 中读取 C# 字典
【发布时间】:2011-10-15 06:57:16
【问题描述】:

我在 C# (ASP.NET) 中有一个字典变量。我想将此数据发送到 Javascript。我正在使用此代码对其进行序列化并发送到 javascript。

Dictionary<string, string> chat;
chat = new Dictionary<string, string>();

chat.Add("Sam", "How are you?");
chat.Add("Rita", "I am good");
var serialize = new System.Web.Script.Serialization.JavaScriptSerializer();

Response.Write(serialize.Serialize(chat));

在 Javascript 页面上,我使用 this 调用此页面;

 $.ajax({
 url: "TextChatCalls/getChat.aspx",
 type: "POST",
 context: document.body,
 success: function (response) {
          var Chats = response.split('\n')[0];
          alert(Chats);

          }
 });

Chats var 中的值为{"Sam":"How are you?","Rita":"I am good"}

我不知道如何在 Chats 中读取此值。无论如何,我可以将其转换为二维数组并将其读取为数组 [0] [0]、数组 [1] [0] 等吗?

谢谢。

编辑: 另一个困惑是,从 ASP.NET 返回的响应对象包含

{"Sam":"How are you?","Rita":"I am good"}

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head><title>

</title></head>
<body>
    <form name="form1" method="post" action="getChat.aspx?Id=141755" id="form1">
<div>
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwULLTE2MTY2ODcyMjlkZJctiKZK4rXVndR3mbGssIarCrOF" />
</div>

    <div>

    </div>
    </form>
</body>
</html>

而不仅仅是{"Sam":"How are you?","Rita":"I am good"},正如预期的那样。因此我必须将响应对象拆分为var Chats = response.split('\n')[0];,使其成为一个字符串!

【问题讨论】:

    标签: javascript jquery asp.net json dictionary


    【解决方案1】:

    你是这样读的:

    alert(Chats["Sam"]);
    

    (就像 C# 字典 :-)。您可以使用Chats["propertyName"] 之类的方式对其进行读/写)

    或者,遍历每个值:

    for (var c in Chats)
    {
        if (Chats.hasOwnProperty(c)) 
        {
            alert(c + '   ' + Chats[c]);
        }
    }
    

    请注意,这与 C# 不同。在 C# 中,c 将包含一个包含键和值的 KeyValuePair&lt;&gt;。在 Javascript 中,c 只是关键,要获得值,您必须使用 Chats[c]

    hasOwnProperty的原因在这里http://yuiblog.com/blog/2006/09/26/for-in-intrigue/

    现在...如果你真的想拆分它:

    var array = [];
    
    for (var c in Chats)
    {
        if (Chats.hasOwnProperty(c)) 
        {
            array.push([c, Chats[c]]);
        }
    }
    

    【讨论】:

    • 我不明白为什么,但我的响应对象包含这个值 "{"Sam":"How are you?","Rita":"I am good"} 渡//EN" "w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> w3.org/1999/xhtml">
      "
    • @Joy 您必须在Response.Write() 之后执行Response.End(),否则您将在 JSON 之后发送整个 aspx 页面:-)
    • 最好还是使用 ashx 处理程序或页面方法。如果您不打算输出页面内容,那么通过 aspx 生命周期是没有意义的。
    【解决方案2】:

    只需将数据类型json添加到您的ajax请求中

    $.ajax({
     url: "TextChatCalls/getChat.aspx",
     type: "POST",
     dataType: "json"
     context: document.body,
     success: function (response) {
              // do something with response
     });
    

    这将使response 成为您可以像这样访问的 javascript 对象

    alert(response["sam"]) //How are you?
    

    要将其拆分为二维数组,只需这样做

    var Chats = [];
    for ( k in response ){
      Chats[Chats.length] = [k, response[k]];
    }
    

    【讨论】:

      【解决方案3】:

      我想这里的重点是您正确理解 JavaScript 客户端发生的事情。到达 JavaScript 客户端的数据类型是 JSON 字符串。 JSON(= JavaScript Object Notation)可以直接被 JavaScript 解释。

      JavaScript 对象如下所示:

      var anObject = { name: "Sam", surname: "abc"};
      

      您可以通过类似于字典的方式访问 JavaScript 对象的属性,例如

      anObject["name"] //will get "Sam"
      

      或直接(属性符号)

      anObject.name
      

      相反,一个类似的 JSON 字符串看起来像

      var aJsonString = '{ "name": "Sam", "surname": "abc"}'
      

      现在要将 JSON 字符串转换为 JavaScript 对象,您需要对其进行解析。 jQuery 已经为您完成了这项工作,否则您可以调用 JSON.parse(aJsonString) 并获得一个有效的 JavaScript 对象。

      这里我做了一个简单的例子:http://jsbin.com/adejev/2/edit

      【讨论】:

        猜你喜欢
        • 2018-10-03
        • 2018-08-27
        • 1970-01-01
        • 2016-12-29
        • 1970-01-01
        • 2014-02-21
        • 1970-01-01
        • 1970-01-01
        • 2020-07-20
        相关资源
        最近更新 更多