2011-10-15 27 views
8

Tengo una variable de diccionario en C# (ASP.NET). Quiero enviar estos datos a Javascript. Estoy usando este código para serializarlo y enviarlo a javascript.Lectura del diccionario C# en 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)); 

En la página de Javascript, llamo a esta página usando esto;

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

      } 
}); 

El valor en los chats var es {"Sam":"How are you?","Rita":"I am good"}

No sé ¿cómo puedo leer este valor en los chats. ¿Puedo de alguna manera convertir esto en una matriz 2D y leerlo como una matriz [0] [0], una matriz [1] [0], etc.?

Gracias.

EDIT: Una confusión más es que, al objeto respuesta, volvió de ASP.NET, contiene

{"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> 

Y no sólo {"Sam":"How are you?","Rita":"I am good"} como se esperaba. Y, por lo tanto, tengo que dividir el objeto de respuesta por var Chats = response.split('\n')[0];, lo que lo convierte en una cadena.

Respuesta

19

Lees así:

alert(Chats["Sam"]); 

(tan como un C# Dictionary :-). Usted lee/escribe a ella usando algo como Chats["propertyName"])

o, para ir a través de cada valor:

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

Tenga en cuenta que esto es diferente a C#. En C# c contendría un KeyValuePair<> que contiene tanto la clave como el valor. En Javascript c es solo la clave y para obtener el valor debe usar Chats[c].

(el razonamiento para hasOwnProperty es aquí http://yuiblog.com/blog/2006/09/26/for-in-intrigue/)

Ahora ... Si realmente desea dividirlo:

var array = []; 

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

No puedo entender por qué, pero mi objeto de respuesta contiene este valor "{" Sam ":" ¿Cómo estás? " 'Rita?':" Soy bueno "} name = método

" – Jayesh

+2

@Joy Tienes que hacer un 'Response.End()' 'después de la Response.Write() ', de otra manera enviarás toda la página aspx después del JSON :-) – xanatos

+2

Gracias. Funcionó. – Jayesh

3

Basta con añadir el tipo de datos JSON a su petición ajax

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

Esto hará que response un objeto JavaScript que se puede acceder como esto

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

para dividir que hasta en una matriz 2D solo haz esto

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

Supongo que el punto importante aquí es que usted entiende correctamente lo que está pasando en el lado del cliente de JavaScript. El tipo de datos que llega en el lado del cliente JavaScript es una cadena JSON. JSON (= JavaScript Object Notation) puede ser interpretado directamente por JavaScript.

objeto

Una JavaScript busca de la siguiente manera:

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

puede acceder a las propiedades de un objeto de JavaScript, ya sea a través de una forma un tanto Diccionario-similar como

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

o directamente (notación propiedad)

anObject.name 

En cambio, una cadena JSON similar se vería como

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

Ahora, para convertir la cadena JSON a un objeto JavaScript, necesita analizarla. jQuery ya lo hace por usted; de lo contrario, puede invocar JSON.parse(aJsonString) y obtendrá un objeto JavaScript válido.

Aquí hice un ejemplo rápido: http://jsbin.com/adejev/2/edit