【问题标题】:Is there a way to conditionally serialize C# list objects based on a property?有没有办法根据属性有条件地序列化 C# 列表对象?
【发布时间】:2018-10-01 16:24:21
【问题描述】:

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

【问题讨论】:

  • 您可以使用 linq 在传递列表之前对其进行排序。 JamsList.OrderBy(t=&gt; t.JamsType != Box)

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


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-23
    • 1970-01-01
    • 1970-01-01
    • 2011-02-10
    • 1970-01-01
    • 2022-01-17
    • 1970-01-01
    • 2017-01-09
    相关资源
    最近更新 更多