【问题标题】:MVC serialize object, list of objects, collections in JsonMVC序列化对象,对象列表,Json中的集合
【发布时间】:2012-11-12 19:48:27
【问题描述】:

解析从控制器返回的 json。出于某种原因,在返回字典时,我需要对关键元素执行“ToString()”,否则会出错。为什么?。下面的示例是序列化 json 的正确方法/最佳方法吗?谢谢

控制器:

    // JSON
    public ActionResult GizmosJsonObject()
    {
        var gizmo = new Gizmo
        {
            Id = 2343,
            Name = "Some awesome name",
            Quantity = 32,
            IntroducedDate = DateTime.Now
        };

        return this.Json(gizmo);
    }

    public ActionResult GizmosJsonObjectCollection()
    {
        var gizmos = new List<Gizmo>();
        gizmos.Add(new Gizmo
        {
            Id = 102,
            Name = "some name1",
            Quantity = 535,
            IntroducedDate = DateTime.Now
        });

        gizmos.Add(new Gizmo
        {
            Id = 122,
            Name = "some name1",
            Quantity = 135,
            IntroducedDate = DateTime.Now
        });

        gizmos.Add(new Gizmo
        {
            Id = 562,
            Name = "some name1",
            Quantity = 2,
            IntroducedDate = DateTime.Now
        });

        return this.Json(gizmos);
    }

    public ActionResult GizmosJsonListInts()
    {
        var gizmos = new List<int>();
        gizmos.Add(2);
        gizmos.Add(56);
        gizmos.Add(32);

        return this.Json(gizmos);
    }

    public ActionResult GizmosJsonDictionaryInts()
    {
        var gizmos = new Dictionary<int, int>();
        gizmos.Add(23, 123);
        gizmos.Add(26, 227);
        gizmos.Add(54, 94323);

        return this.Json(gizmos.ToDictionary(x => x.Key.ToString(), y => y.Value));
    }

    public ActionResult GizmosJsonDictionaryStrings()
    {
        var gizmos = new Dictionary<string, string>();
        gizmos.Add("key1", "value1");
        gizmos.Add("Key2", "value2");
        gizmos.Add("key3", "value3");

        return this.Json(gizmos);
    }

查看:

<script type="text/javascript">
/*<![CDATA[*/
    $(function () {

        // json object
        $("a.Object").click(function (e) {
            e.preventDefault();
            $.ajax({
                url: '@Url.Action("GizmosJsonObject", "Home")',
                contentType: 'application/json',
                type: 'POST',
                success: function (json) {
                    console.log(json.Id);
                    console.log(json.Name);
                    console.log(json.IntroducedDate);

                    // format date
                    var date = new Date(parseInt(json.IntroducedDate.substr(6)));
                    console.log(date);
                }
            });
        });

        // json object collection
        $("a.ObjectCollection").click(function (e) {
            e.preventDefault();
            $.ajax({
                url: '@Url.Action("GizmosJsonObjectCollection", "Home")',
                contentType: 'application/json',
                type: 'POST',
                success: function (json) {
                    $(json).each(function () {
                        console.log(this.Id);
                        console.log(this.Name);
                        console.log(this.IntroducedDate);

                        // format date
                        var date = new Date(parseInt(this.IntroducedDate.substr(6)));
                        console.log(date);
                    });
                }
            });
        });

        // json list of ints
        $("a.ListInts").click(function (e) {
            e.preventDefault();
            $.ajax({
                url: '@Url.Action("GizmosJsonListInts", "Home")',
                contentType: 'application/json',
                type: 'POST',
                success: function (json) {
                    $(json).each(function (i, e) {
                        console.log(json[i]);
                    });
                }
            });
        });

        // json dictionary of ints
        $("a.DictionaryInts").click(function (e) {
            e.preventDefault();
            $.ajax({
                url: '@Url.Action("GizmosJsonDictionaryInts", "Home")',
                contentType: 'application/json',
                type: 'POST',
                success: function (json) {
                    for (var key in json) {
                        if (json.hasOwnProperty(key)) {
                            var value = json[key];
                            console.log(key);
                            console.log(value);
                        }
                    }
                }
            });
        });

        // json dictionary of strings
        $("a.DictionaryStrings").click(function (e) {
            e.preventDefault();
            $.ajax({
                url: '@Url.Action("GizmosJsonDictionaryStrings", "Home")',
                contentType: 'application/json',
                type: 'POST',
                success: function (json) {
                    for (var key in json) {
                        if (json.hasOwnProperty(key)) {
                            var value = json[key];
                            console.log(key);
                            console.log(value);
                        }
                    }
                }
            });
        });
    });
/*]]>*/
</script>

【问题讨论】:

    标签: asp.net-mvc json asp.net-mvc-3 jquery getjson


    【解决方案1】:

    JSON 密钥的类型必须为 string。请参阅此处的右侧边栏http://www.json.org/,其中声明一对必须采用字符串的形式:值。


    为了佐证,本文http://www.ietf.org/rfc/rfc4627.txt 声明如下:

    2.2。对象 对象结构表示为一对花括号 围绕零个或多个名称/值对(或成员)。一个名字是一个 细绳。每个名称后面都有一个冒号,用于分隔名称 从价值。单个逗号将值与以下值分开 姓名。对象中的名称应该是唯一的。

    【讨论】:

      猜你喜欢
      • 2010-11-30
      • 2015-06-23
      • 1970-01-01
      • 2020-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-05
      • 1970-01-01
      相关资源
      最近更新 更多