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

前端 未结 4 640
佛祖请我去吃肉
佛祖请我去吃肉 2020-12-30 06:18

I recently asked this question, but after some of the responses and some research, i wanted to change what i was actually asking.

i have seen a number of blog posts

相关标签:
4条回答
  • 2020-12-30 07:04

    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.

    0 讨论(0)
  • 2020-12-30 07:10

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

    0 讨论(0)
  • 2020-12-30 07:13

    Your code isn't valid - perhaps a typo?

    $.post('/MyController/Refresh', function (data) {
    
               var calendarDictionary = data.Dict;
    
        }, "json");
    

    Also, I've seen cases where a method needs the data param, even if it's empty {}.

    Finally, the json should come back inside data.d - use firebug to console.log the response.

    0 讨论(0)
  • 2020-12-30 07:15

    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 } ] } }
    
    0 讨论(0)
提交回复
热议问题