También puede integrar la biblioteca gratuita Json.NET dentro de su código.
Esta biblioteca no sufre los problemas JavascriptSerializer
tiene como el problema de referencia circular.
Esta es una muestra usando la biblioteca a la salida JSON de una acción del controlador
public virtual ActionResult ListData() {
Dictionary<string, string> openWith = new Dictionary<string, string>();
openWith.Add("txt", "notepad.exe");
openWith.Add("bmp", "paint.exe");
openWith.Add("dib", "paint.exe");
openWith.Add("rtf", "wordpad.exe");
JsonNetResult jsonNetResult = new JsonNetResult();
jsonNetResult.Formatting = Formatting.Indented;
jsonNetResult.Data = openWith;
return jsonNetResult;
}
Si se ejecuta esta acción va a obtener los siguientes resultados
{
"txt": "notepad.exe",
"bmp": "paint.exe",
"dib": "paint.exe",
"rtf": "wordpad.exe"
}
JsonNetResult es un simple contenedor de clase personalizada alrededor de las funcionalidades de la biblioteca Json.NET.
public class JsonNetResult : ActionResult
{
public Encoding ContentEncoding { get; set; }
public string ContentType { get; set; }
public object Data { get; set; }
public JsonSerializerSettings SerializerSettings { get; set; }
public Formatting Formatting { get; set; }
public JsonNetResult() {
SerializerSettings = new JsonSerializerSettings();
}
public override void ExecuteResult(ControllerContext context) {
if (context == null)
throw new ArgumentNullException("context");
HttpResponseBase response = context.HttpContext.Response;
response.ContentType = !string.IsNullOrEmpty(ContentType)
? ContentType
: "application/json";
if (ContentEncoding != null)
response.ContentEncoding = ContentEncoding;
if (Data != null) {
JsonTextWriter writer = new JsonTextWriter(response.Output) { Formatting = Formatting };
JsonSerializer serializer = JsonSerializer.Create(SerializerSettings);
serializer.Serialize(writer, Data);
writer.Flush();
}
}
}
No estoy seguro de que JSON.NET pueda hacer Diccionarios, puede confirmar que sí, ya que eso es lo que RubbleFord está pidiendo –
Funciona a la perfección :) He editado mi respuesta por placer – Lorenzo
@Lorenzo, ¿por qué? usar esto sobre el construido en Json (xxx)? ¿Alguna ventaja? –