【问题标题】:Json Serialization Array to ObjectJson 序列化数组到对象
【发布时间】:2013-05-31 09:11:53
【问题描述】:

我在从对象列表中序列化 json 时遇到问题

我的目标是拥有这种格式 =>

    var tag =                 
    {
            RCP: {name: "Dossier à présenter en RCP", type: "checkbox", events: {change: function(e) { console.log(e.data); console.log(e); } }, callback: function(key, opt){ console.log("key : " + key); console.log(opt); alert(opt.$trigger.attr("id")); }},
            COL: {name: "Dossier à présenter en colloque", type: "checkbox", callback: function(key, opt){  console.log("key : " + key); console.log(opt); alert(opt.$trigge.attr("id"));  }},
            COM: {name: "Commentaire", type: "textarea", callback: function(key, opt){  console.log("key : " + key); console.log(opt); alert(opt.$trigge.attr("id"));  }}
    };

我正在使用 EF 来检索数据:

        var list = (from e in l_entities.TAG
                    where e.tag_site_code.Trim() == siteCode.Trim()
                    select new CvrTag
                    {
                        Id = e.tag_id,
                        Name = e.tag_libelle,
                        Type = e.tag_site_code
                    }
                ).ToList();

但是当我使用 JsonConvert.SerializeObject(list) 时,我检索了一个经典的数组。

所以我的问题是: - 如何用大括号代替数组的括号 - 如何在没有引号的json对象之前有一个id(即:RCP或COL) - 与内部 json 对象相同(即:名称或类型)

感谢您的帮助

【问题讨论】:

标签: asp.net-mvc json json.net


【解决方案1】:

由于您正在调用ToList(),因此您的序列化将是一个列表/数组。如果您想要一个对象,请使用ToDict()

var dict = (from e in l_entities.TAG
            where e.tag_site_code.Trim() == siteCode.Trim()
            select new CvrTag
            {
                Id = e.tag_id,
                Name = e.tag_libelle,
                Type = e.tag_site_code
            }
        ).ToDict(t => t.Id);

【讨论】:

  • 字典非常适​​合我的使用,谢谢。我现在需要删除键上的引号:)
  • 在 JavaScript 中,即使您的密钥是一个字符串(带引号),您也可以使用点符号访问它,因此对于大多数用例来说,删除密钥上的引号是不必要的。换句话说,这是有效的:var tag = { "RCP": {...} }; alert(tag.RCP);.
猜你喜欢
  • 1970-01-01
  • 2014-03-05
  • 2015-06-11
  • 2017-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多