有没有一种方法可以基于属性有条件地序列化C#列表对象?

时间:2018-10-01 16:24:21

标签: c# asp.net-mvc json-serialization

我有一个MVC模型,该模型根据用户输入生成JSON文件,这些文件用作自动化工作流程的一部分。我遇到的问题是弄清楚如何根据特定属性值更改序列化对象列表的顺序。

这是我模型的简化视图:

public class Ticket
{
    public string TicketNumber { get; set; }
    public string TicketName { get; set; }
    public string ApplicationName { get; set; }
    public IList<Jams> JamsList { get; set; }
}

public class RootObject
{
    public Ticket ChangeTicket { get; set; }
}

public class JamsDestination
{
    public string Dev { get; set; }
    public string QA { get; set; }
    public string Prod { get; set; }
}

public class Jams
{
    public string TFSLocation { get; set; }       
    public string FileName { get; set; }
    public string JamsType { get; set; }
    public JamsDestination JamsLocation { get; set; }
}

(我正在控制器的post部分中使用Newtonsoft.Json和SerializeObject()函数)

JamsType是从sql表(变量,作业,触发器和Box)填充的下拉列表。我要尝试做的是确保按照以下顺序序列化任何卡纸更改(在列表中:JamsList),以确保,以确保它会在我们的自动化工作流程中正常运行。 有什么方法可以完成而无需在视图中设置某种形式的Javascript函数以在对它们进行索引之前对其重新排序? (我的观点是动态表格设置,因此不能保证每次Jams都会发生更改,更不用说与票证相关联的数字了。)

1 个答案:

答案 0 :(得分:0)

我意识到,在执行序列化JSON文件之前,只需执行以下操作即可将Linq逻辑添加到我的控制器中:

ticket.JamsList = ticket.JamsList.OrderBy(jams => jams.JamsType == "Box").ToList();

实际上,所有这些只是对Jams更改列表进行重新排序以使其在序列化之前满足我的条件,而不是更改对序列表进行序列化的顺序(我认为需要执行的方式)。