2015-06-11 98 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);