Сериализация элемента в базе условий с использованием XmlSerializer c # - PullRequest
0 голосов
/ 01 октября 2018

У меня есть объект, у которого один из параметров имеет список объектов.

Пример, объект ученика со списком экзаменов:

[Serializable]
public class Student
{
    [XmlAttribute("Name")]
    public string Name {get; set;}

    [XmlArray("Exams")]
    public List<Exam> Exams {get; set;}
}

[Serializable]
public class Exam
{
    [XmlAttribute("Course")]
    public string Course;

    [XmlAttribute("Score")]
    public int Score;
}

Моя цель - сериализациямодель Студента и включить в XML только экзамены, удовлетворяющие некоторым критериям, например, я хотел бы только экзамены с низким (<5) баллом.</p>

Можно ли выполнить эту операцию, используя XmlSerializer, присутствующий в System.Xml.Serialization пространстве имен?

Ответы [ 2 ]

0 голосов
/ 01 октября 2018

Мне не известен ни один сериализатор, который предлагает условную сериализацию "на элемент коллекции";некоторые делают условную сериализацию "на собственность", но ... не это.Простейшей вещью было бы создать копию студента только с теми элементами, которые вы хотите сериализовать.Более сложным подходом было бы написать какую-то специальную IList<Exam> оболочку, которая оборачивает тот же экземпляр List<Exam> и применяет фильтрацию, но ... это очень уродливо, и я настоятельно рекомендую не пытаться это делать (проблемы,например: что произойдет, если Add вызывается для типа обертки, а добавляемый элемент имеет высокий балл?).

Поэтому я бы предложил отфильтровать до сериализации -либо удалив ненужные элементы, либо создав клон с нужными элементами.

0 голосов
/ 01 октября 2018

Вы можете просто создать студента с удовлетворительной оценкой экзаменов, используя запрос LINQ, а затем сериализовать результат

var studentToSerialize = new Student { 
           Name = student.Name,
           Exams = student.Exams.where(e => e.Score < 5)
    }
// Your serialization logic here
...