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

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

提问人:C Murphy 提问时间:10/2/2018 更新时间:10/4/2018 访问量:191

问:

我有一个 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 表(Variable、Job、Trigger 和 Box)填充的下拉列表。我试图做的是确保任何 Jams 更改(在列表中:JamsList)都按顺序序列化,以确保 JamsType = Box 的所有 Jams 更改最后序列化,以确保它将作为我们自动化工作流程的一部分正常运行。有没有办法在不设置某种形式的 Javascript 函数的情况下完成此操作,以便在索引它们之前对它们进行重新排序?(我的观点是动态表设置,因此不能保证每次都会有任何 Jams 更改,更不用说与工单关联的数量了)。

C# ASP.NET-MVC JSON 序列化

评论

0赞 Amin Mozhgani 10/2/2018
在传递列表之前,可以使用 linq 对列表进行排序。JamsList.OrderBy(t=> t.JamsType != Box)

答:

0赞 C Murphy 10/4/2018 #1

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

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

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