C#中的有序Json属性列表

时间:2017-01-19 15:35:56

标签: c# .net json json.net

我有一个如下所示的类,我正在使用JSON.NET来序列化/反序列化

public class Car
{
  [JsonProperty(Order = 3)]
  public int CarId {get; set;}
  [JsonProperty(Order = 1)]
  public string CarName {get; set;}
  [JsonIgnore]
  public int CarMfgDate {get; set}
  [JsonProperty(Order = 2)]
  public int CarCapacity {get; set;}
}

我需要按照' JsonProperty'定义的相同顺序获取所有Json可见属性的列表。上面类中的属性。所以,我希望列表如下所示初始化为' Car'类。

List<string> columns = GetOrderedJSONProperties();

Console.WriteLine(columns.Count); //Prints "3"
Console.WriteLine(columns[0]); //Prints "CarName"
Console.WriteLine(columns[1]); //Prints "CarCapacity"
Console.WriteLine(columns[2]); //Prints "CarId"

请帮我写一下GetOrderedJSONProperties()方法。谢谢你的帮助!

1 个答案:

答案 0 :(得分:2)

您可以使用Linqs OrderBy功能:

var columns = typeof(Car).GetProperties()
    .Where(p => p.GetCustomAttribute<JsonIgnoreAttribute>() == null)
    .OrderBy(p => p.GetCustomAttribute<JsonPropertyAttribute>()?.Order)
    .Select(p => p.Name).ToList();