2015-06-11 96 views
0

我有一個帶有「門票」列表的大json對象。架構看起來像如下對一個大的JSON對象執行排序的順序

{ "Artist": "Artist1", "Tickets": [ { "Id": 1, "Attr2Array": [ { "Att41": 1, "Att42": "A", "Att43": null }, { "Att41": 1, "Att42": "A", "Att43": null }, ], . . . (more properties) "Price": "20", "Description": "I m a ticket" }, { "Id": 4, "Attr2Array": [ { "Att41": 1, "Att42": "A", "Att43": null }, { "Att41": 1, "Att42": "A", "Att43": null }, ], . . . . (more properties) "Price": "30", "Description": "I m a ticket" } ] }

列表中的每個項目具有25-30性質(一些簡單類型,以及其他複雜的陣列爲嵌套對象)

我必須從API讀取的對象端點只提取「ID」和「說明」,但他們需要通過「價格」,這是例如

在我將以這個數據操作

    進行什麼樣的順序一個int進行排序
  1. 我是否應該使用json對象,將它反序列化爲只有這2個屬性(我需要)的另一個對象,然後在「Price」上執行排序「asc」?

請注意,我有排序列表後,我將不得不將它轉換回json列表,因爲前端終究消耗json。

什麼我不喜歡有關此方法是(使用用於序列化和deserialisation發生這種情況

  • 我JSON對象上第一執行排序的循環例如一個二進制/冒泡排序),然後使用該對象來創建只有那些2個特性的強類型(deserialised)對象,然後連載回傳遞給前端
  • 我不知道如何高性能泡沫如果我願意的話,將會分類在大塊數據處理方面獲得任何性能提升。

    我還需要記住,這個實現可以,因爲在日後考慮到其他屬性,如「availabilitydate」,該前端可以添加更多的過濾器,如「availabilitdate」 ASC

    任何幫助非常感謝

    感謝

    回答

    0

    你可以反序列化使用Microsoft System.Web.Extensions程序JavaScriptSerializer.DeserializeObject您的JSON字符串(或文件)。

    首先,您必須將類關聯到您的JSON。要創建類,請選擇JSON示例數據,然後在Visual Studio中,轉至編輯/粘貼特殊/粘貼JSON作爲類

    接下來,使用此示例將JSON字符串反序列化爲類型化對象,並使用Linq按價格屬性對所有故障單進行排序。

    String json = System.IO.File.ReadAllText(@"C:\Data.json"); 
    var root = new System.Web.Script.Serialization.JavaScriptSerializer().Deserialize<Rootobject>(json); 
    var sortedTickets = root.Tickets.OrderBy(t => t.Price);