繁体   English   中英

使用XmlSerializer C#根据条件序列化项目

[英]Serialize item in base of condition using XmlSerializer c#

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

例如,带有检查清单的Student对象:

[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)低的考试。

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

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

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

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

因此,我的建议是序列化之前进行过滤-通过删除不需要的项或通过仅创建所需项的克隆来进行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM