json 在Javascript中阅读C#字典

z18hc3ub  于 2023-02-01  发布在  Java
关注(0)|答案(4)|浏览(130)

我有一个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页面上,我使用以下代码调用此页面;

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

          }
 });

聊天变量中的值为{"Sam":"How are you?","Rita":"I am good"}
我不知道如何在聊天中读取这个值。我可以把它转换成一个2D数组并读取为array [0][0],array [1][0]等吗?
谢谢。
编辑:还有一个令人困惑的地方是,从ASP.NET返回的response对象包含

{"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];,这使得它成为一个字符串!

az31mfrm

az31mfrm1#

你读起来是这样的:

alert(Chats["Sam"]);

(so就像C#字典:-)。你可以用Chats["propertyName"]之类的东西读/写它)
或者,遍历每个值:

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

注意,这与C#不同。在C#中,c将包含一个KeyValuePair<>,该KeyValuePair<>包含键和值。在Javascript中,c只是键,要获得值,必须使用Chats[c]
(the 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]]);
    }
}
jvlzgdj9

jvlzgdj92#

只需将数据类型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]];
}
aiazj4mn

aiazj4mn3#

我想这里最重要的一点是你要正确理解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

tez616oj

tez616oj4#

对于ASP.NET核心,我在cshtml文件中使用了这个方法。基本上我将整个字典重新构建到Javascript中。使用这种方法的原因是因为我在Javascript中有一些子函数,这些子函数无法在按键等事件上使用动态参数调用服务器模型函数。

var ModelZxcvWarnLookup = {};
@foreach (var kvp in Model.View.ZxcvbnWarningMsgLocalization)
{
    @:ModelZxcvWarnLookup['@Html.Raw(@kvp.Key)'] = '@Html.Raw(@kvp.Value)';
}

检查浏览器获取的html页面:

var ModelZxcvWarnLookup = {};
ModelZxcvWarnLookup["Straight rows of keys are easy to guess"] = "Chinese Straight rows of keys are easy to guess";
ModelZxcvWarnLookup["Short keyboard patterns are easy to guess"] = "Chinese Short keyboard patterns are easy to guess";
ModelZxcvWarnLookup['Repeats like "aaa" are easy to guess'] = 'Repeats like "aaa" are easy to guess';

相关问题