![](/img/trans.png)
[英]C#, Why does XmlSerializer serialize the base object instead of the Interface?
[英]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.