Json领域订单

时间:2012-09-27 08:21:35

标签: asp.net-mvc json ravendb

我有一个以这种方式存储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 个答案:

答案 0 :(得分:2)

尝试使用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; }
}

答案 1 :(得分:0)

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>';
}