1

我有一个对象,它的参数之一是对象列表。

例如,具有考试列表的学生对象:

[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;
}

我的目标是序列化 Student 模型并仅将满足某些条件的考试包含到 XML 中,例如我只想要低 (< 5) 分数的考试。

可以使用存在于命名空间中的 XmlSerializer 来完成这种操作System.Xml.Serialization吗?

4

2 回答 2

0

您可以使用 LINQ 查询简单地创建一个考试成绩令人满意的学生,然后序列化结果

var studentToSerialize = new Student { 
           Name = student.Name,
           Exams = student.Exams.where(e => e.Score < 5)
    }
// Your serialization logic here
于 2018-10-01T15:34:26.233 回答
0

我不知道有任何提供“每个集合元素”条件序列化的序列化程序;有些人做“每个属性”的条件序列化,但......不是这个。最简单的方法是只使用您想要序列化的项目创建学生的副本。更复杂的方法是编写某种自定义IList<Exam>填充程序来包装相同的List<Exam>实例并应用过滤,但是......这很丑陋,我强烈建议不要尝试这样做(问题,例如:如果Add在包装器类型上调用,被添加的元素得分高?)。

所以我的建议是在序列化之前进行过滤- 通过删除不需要的项目,或者通过创建仅包含所需项目的克隆。

于 2018-10-01T15:34:32.223 回答