2

我有一个用 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;
 }
4

2 回答 2

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; }
}
于 2012-09-28T03:54:02.237 回答
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>';
}
于 2012-09-27T11:35:18.317 回答