在JObject中按属性对对象排序

时间:2020-02-19 20:31:51

标签: c# json list linq

我有一个列表定义为:

    List<SensorData> tempSensorData = new List<SensorData>();

这是我填充此列表的方式:

    tempSensorData.Add(new SensorData
    {
         Data = JObject.Parse(values[r, 4].ToString()),
         SensorGuid = values[r, 2].ToString()
    });

这是我对SensorData类的定义:

public class SensorData
    {
        public JObject Data { get; set; }

        public string SensorGuid { get; set; }
    }

数据属性中有一个称为时间戳的属性。我希望我的列表按该值排序。我怎样才能做到这一点? 我已经尝试过:

     tempSensorData.OrderBy(o => o.Data.SelectToken("timestamp"));

但这没有帮助

这是数据中的JSON值:

{{
  "Record": "A",
  "timestamp": 1572987031,
  "signal_strength": "021",
  "vbatt": "3.10",
  "temperature": "21.5"
}}

1 个答案:

答案 0 :(得分:2)

您可以尝试类似的事情

var result = tempSensorData.OrderBy(o => o.Data["timestamp"].Value<long>());

使用long的{​​{3}}方法获取timestamp属性的JToken值,然后在{{1}中的Func<TSource,TKey>键选择器中使用此值}。

OrderBy类的Value<T>方法不同,Sort方法将返回List<T>作为结果,而不是更改源列表,因此应将返回值分配给变量

相关问题