2012-04-30 26 views
11

Soy completamente nuevo en C# y ya me he dado un dolor de cabeza. Sé que esto es probablemente algo de niños para ti, pero he pasado más de una hora buscando en Google y parece que no puedo resolverlo.cómo convertir una matriz con claves/valores a JSON C#

Todo lo que intento hacer es convertir una matriz en JSON. Sé PHP bien, así que aquí está un ejemplo de lo que estoy tratando de hacer (en PHP):

$myarr=array("key1"=>"value for key 1","key2"=>"value for key 2"); 

$jsonArray=json_encode($myarr); 

por lo $jsonArray habrá: {"key1":"value for key 1","key2":"value for key 2"}

Ahora, estoy tratando de hacer exactamente eso, pero en C#.

Esto es lo que tengo hasta ahora:

String[] keys = new String[] { "emailSend","toEmail"}; 
String[] values = new String[] {textBox2.Text,textBox1.Text}; 
JavaScriptSerializer js = new JavaScriptSerializer(); 
string json = js.Serialize(keys);//final json result 
MessageBox.Show(json);//show me 

Estoy usando Visual Studio C# 2010, que está lanzando este error (con el código anterior):

The type or namespace name 'JavaScriptSerializer' could not be found (are you missing a using directive or an assembly reference?)

Ideas en ¿Qué estoy haciendo mal aquí? Gracias

Respuesta

27

Parece que no tiene una declaración correcta using? Añadir lo siguiente a la parte superior del archivo:

using System.Web.Script.Serialization;

EDITAR: Para obtener JSON formato correcto, utilice un Dictionary lugar:

var keyValues = new Dictionary<string, string> 
       { 
        { "emailSend", textBox1.Text }, 
        { "toEmail", textBox2.Text } 
       }; 

JavaScriptSerializer js = new JavaScriptSerializer(); 
string json = js.Serialize(keyValues); 
MessageBox.Show(json); 
+4

Esto está en System.Web.Extensions.dll en caso de que no lo tiene cargado como referencia (es decir, un proyecto de Windows Forms o WPF no lo tendría por defecto). Puede optar por usar algo como [fastJSON] (http://www.codeproject.com/Articles/159450/fastJSON). Serializar objetos es aún más fácil y más rápido que usar JavaScriptSerializer. – erodewald

+1

Ahora obtengo el error: 'El tipo o el nombre del espacio de nombres 'Script' no existe en el espacio de nombres 'System.Web' (¿falta una referencia de ensamblado?)' Gracias xD –

+1

@nav_nav Hmm, extraño. ¿Estás usando pre .NET 3.5? – mattytommo

14

cómo sobre el uso y la JSON.NET jobject ¿clase?

var obj = new JObject(); 

obj["One"] = "Value One"; 
obj["Two"] = "Value Two"; 
obj["Three"] = "Value Three"; 

var serialized = JsonConvert.SerializeObject(obj); 

le da

{"One":"Value One","Two":"Value Two","Three":"Value Three"} 
+1

Con eso, obtengo: 'El tipo o el nombre del espacio de nombres 'JObject' no se pudo encontrar (¿falta una directiva using o una referencia de ensamblado?)' Y 'El nombre 'JsonConvert' no existe en el contexto actual' –

+2

¿Has añadido la librería json.net? -> http://json.codeplex.com/ – MUG4N

+0

En caso de * JObject no encontrado *, debe agregar 'using Newtonsoft.Json.Linq;' biblioteca. – Fil

Cuestiones relacionadas