有没有办法根据 属性 有条件地序列化 C# 列表对象?

Is there a way to conditionally serialize C# list objects based on a property?

我有一个 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 table(变量、作业、触发器和框)填充的下拉列表。我想要做的是确保任何 Jam 更改(在列表中:JamsList)按顺序序列化 确保 JamsType = Box 的所有 Jam 更改最后序列化 ,顺序以确保它将 运行 正确地作为我们自动化工作流程的一部分。 有没有什么方法可以完成这个,而无需在视图中设置某种形式的 Javascript 函数,以便在它们被索引之前重新排序? (我的观点是动态 table 设置,因此不能保证每次 Jam 都会有任何变化,更不用说有多少与票证相关联了)。

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

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

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