代码之家  ›  专栏  ›  技术社区  ›  Roberto

Json字段顺序

  •  2
  • Roberto  · 技术社区  · 12 年前

    我有一个用RavenDB存储的模型,是这样完成的:

    public abstract class Animal
    {
       public string Id { get; set; }
       public int LegsNumber { get; set; }
    }
    
    public class Giraffe: Animal
    {
       public double NeckLength { get; set; }
    }
    

    在我的MVC控制器中,我查询所有Giraffe,并以这种方式将结果放入Json格式:

    return new JsonResult 
    { 
       JsonRequestBehavior = System.Web.Mvc.JsonRequestBehavior.AllowGet, 
       Data = DocumentSession.Query<Giraffe>() 
    };
    

    输出类似于

    [{"NeckLength":2.5, "Id":"bob", "LegsNumber":4}, {...}, ...]
    

    如何自定义字段顺序以获得如下结果:

    [{"Id":"bob", "LegsNumber":4, "NeckLength":2.5}, {...}, ...]
    

    ?

    如果你很好奇,想知道我为什么要更改顺序,是因为我有一个通用的javascript片段,它可以获取json并按原样打印出来:

     for (var field in data[0]) {
        var row = '<tr>';
        row += '<td><b>' + field + '</b></td>'
    
        $.each(data, function (i, value) {
           row += '<td>' + value[field] + '</td>'
        });
    
        row += '</tr>';
        result += row;
     }
    
    2 回复  |  直到 12 年前
        1
  •  2
  •   Matt Johnson-Pint    12 年前

    尝试使用JsonPropertyAttribute对字段进行如下归因:

    public abstract class Animal
    {
       [JsonProperty(Order = 0)]
       public string Id { get; set; }
    
       [JsonProperty(Order = 1)]
       public int LegsNumber { get; set; }
    }
    
    public class Giraffe: Animal
    {
       [JsonProperty(Order = 2)]
       public double NeckLength { get; set; }
    }
    
        2
  •  0
  •   amesh Vaibhav.Inspired    12 年前

    Json不提供基于索引的访问。 相反,你可以试试这样的东西

    for (int i = 0; i < Data.length(); i++) {
     var item=Data.[i];
    
     var row = '<tr>';
      row += '<td><b>' +item['Id'] + '</b></td>'+'<td><b>' +item['LegsNumber'] + '</b></td>'
     +item['NeckLength'] + '</b></td>'+'<tr>';
    }