Есть ли способ условно сериализовать объекты списка С# на основе свойства?

У меня есть модель 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; }
}

(Я использую Newtonsoft.Json и функцию SerializeObject() в разделе сообщений моего контроллера)

JamsType — это раскрывающийся список, заполняемый из таблицы sql (переменная, задание, триггер и ящик). Что я пытаюсь сделать, так это убедиться, что любое изменение Jams (в списке: JamsList) сериализуется в порядке, который гарантирует, что все изменения Jams для JamsType = Box сериализуются последними, чтобы гарантировать, что он будет работать должным образом как часть нашего автоматизированного рабочего процесса. Есть ли способ сделать это без настройки какой-либо функции Javascript в представлении, чтобы изменить их порядок до того, как они будут проиндексированы? (Мое представление представляет собой динамическую настройку таблицы, поэтому не гарантируется, что каждый раз будут какие-либо изменения Jams, не говоря уже о том, сколько из них связано с заявкой).


person C Murphy    schedule 01.10.2018    source источник
comment
Вы можете использовать linq для упорядочения списка перед его передачей. JamsList.OrderBy(t=> t.JamsType != Box)   -  person Amin Mozhgani    schedule 02.10.2018


Ответы (1)


Я понял, что мне просто нужно добавить логику Linq в мой контроллер ДО сериализации файла JSON, выполнив следующие действия:

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

Все, что это на самом деле делает, это просто переупорядочивает список изменений Jams в соответствии с моими условиями, прежде чем он будет сериализован, а не меняет порядок, в котором он сериализует список (как я думал, это должно быть выполнено).

person C Murphy    schedule 04.10.2018