Can you convert C# dictionary to Javascript associative array using asp.net mvc Json() Can you convert C# dictionary to Javascript associative array using asp.net mvc Json() json json

Can you convert C# dictionary to Javascript associative array using asp.net mvc Json()


You probably could have been a little more specific about the it just blows up part but here's an example that works fine for me:

Model:

public class CalendarEvent{    public string Name { get; set; }    public DateTime Date { get; set; }    public int Id { get; set; }}

Controller:

public class HomeController : Controller{    public ActionResult Index()    {        return View();    }    [HttpPost]    public ActionResult Refresh()    {        var model = new[]        {            new CalendarEvent             {                Id = 1,                Name = "event 1",                Date = DateTime.Now            },            new CalendarEvent             {                Id = 2,                Name = "event 2",                Date = DateTime.Now            },            new CalendarEvent             {                Id = 3,                Name = "event 3",                Date = DateTime.Now.AddDays(2)            },        }        .ToList()        .ConvertAll(a => new        {            a.Name,            a.Id,            Date = a.Date.ToString("MMM dd, yyyy"),        })        .GroupBy(r => r.Date)        .ToDictionary(            group => group.Key,             group => group.Select(x => new { x.Name, x.Id })        );        return Json(new { Dict = model });    }}

View:

<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage" %>    <!DOCTYPE html><html><head>    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />    <title>JSON Test</title>    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script>    <script type="text/javascript">    $(function () {        $.post('/home/refresh', function(data) {            // TODO : manipulate the data.Dict here        }, 'json');    });    </script></head><body></body></html>

Returned JSON:

{ "Dict": { "Sep 05, 2010": [ { "Name": "event 1", "Id": 1 },                              { "Name": "event 2", "Id": 2 } ],            "Sep 07, 2010": [ { "Name": "event 3", "Id": 3 } ] } }


In json you have two main structures: an "array", this is a list of element, and an "object", a group of key-value pairs.

So for what you want to achieve the json method has to return a json object (debug the server side to see what is actually send to the client).

In javascript the json object will be directly mapped to a javascript object, and in javascript objects are also associative arrays

So to summarize:

Make sure the server returns a json object, then you can use it as some kind of dictionary in javascript.


You might want to look at the Json.NET library. It makes creating JSON representations of .Net objects very simple.