簡體   English   中英

如何對 C# 中的兩個 JSON arrays 進行排序和比較?

[英]How to sort and compare two JSON arrays in C#?

我有兩個 JSON arrays 如下

# 數組 1

[
  {
    "objectId": "34fc6a0c-be91-4a6d-b5dd-20ae347085c7",    
    "model": "robotics.energy",
    "timestamp": "2020-08-07T12:36:40.697Z",
    "value": 2.0
  },
  {
    "objectId": "34fc6a0c-be91-4a6d-b5dd-20ae347085c7",    
    "model": "robotics.energy",
    "timestamp": "2020-08-07T12:36:40.697Z",
    "value": 4459.477340033425
  }
]

# 數組2

[
 {
    "model": "robotics.energy",
    "objectId": "34fc6a0c-be91-4a6d-b5dd-20ae347085c7",       
    "timestamp": "2020-08-07T12:36:40.697Z",
    "value": 4459.477340033425
  },
  {
    "timestamp": "2020-08-07T12:36:40.697Z",
    "objectId": "34fc6a0c-be91-4a6d-b5dd-20ae347085c7",    
    "model": "robotics.energy",   
    "value": 2.0
  }
]

我想斷言這兩個 arrays 是否相等。

我在下面嘗試了。 但它失敗了,因為元素的順序不同

var jarray1 = JArray.Parse(Array1);
var jarray2 = JArray.Parse(Array2);
JArray.DeepEquals(jarray1, jarray2); 

無論如何嘗試如下它會引發錯誤,因為未實現 Icomparable 接口。

Enumerable.SequenceEqual(jarray1 .OrderBy(t => t), jarray2.OrderBy(t => t)).Should().BeTrue();   

                 

有沒有簡單的解決方案?

我想將其轉換為字符串,然后對其進行排序並進行驗證。 但我覺得這不是好辦法。

如下創建類以對其進行反序列化。

public class Telemetry
    {
        [JsonProperty("model")]
        public string Model { get; set; }

        [JsonProperty("objectId")]
        public string ObjectId { get; set; }

        [JsonProperty("timestamp")]
        public string Timestamp { get; set; }

        [JsonProperty("value")]
        public object Value { get; set; }     
    }

public class TelemetryRoot
    {
        public List<Telemetry> Telemetries { get; set; }
    }

然后如下進行比較反序列化的對象。

var array1Obj = JsonConvert.DeserializeObject<List<TelemetryRoot>>(Array1);
var array2Obj = JsonConvert.DeserializeObject<List<TelemetryRoot>>(Array2);
array1Obj.Should().BeEquivalentTo(array2Obj);     //using fluent assertions

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM