我想基于某些条件序列化数组的某些特定元素。
例如:
public class Team
{
public string Name {get; set;}
public Person[] Staff;}
public class Person
{
public string Name {get; set;}
public NrOfHolidays {get; set;}
}
在序列化Team
类时,我只想序列化Staff
数组中那些NrOfHolidays
大于10的成员。
有没有办法可以做到这一点?
我知道ShouldSerialize[MemberName]
函数如何用于序列化/不序列化给定成员,但我不知道它是否可以应用于作为成员的数组元素。
编辑: 谢谢你的回复。
我刚发现这个post。 这是我面临的完全相同的问题,但这里提出的解决方案是针对JSON的。我正在寻找类似于上面文章中提出的解决方案,该解决方案适用于XML序列化。
答案 0 :(得分:1)
您可以将数组标记为不可序列化,然后创建序列化属性,使用linq查询过滤该数组:
public class Team
{
public string Name {get; set;}
[XmlIgnoreAttribute]
public Person[] Staff{ get; set; }
public Person[] SerializationStaff
{
get
{
return Staff == null ? null : Staff.Where(s => s.NrOfHolidays > 10).ToArray();
}
set
{
Staff = value;
}
}
}
public class Person
{
public string Name {get; set;}
public int NrOfHolidays {get; set;}
}
答案 1 :(得分:0)
为什么不创建一个新团队,只包含那些具有以下条件的Person
:
var newTeam = new Team(myTeam.Staff.Where(x => x.Holidays > 10));
假设你有Team
的构造函数,它需要一组Person
。现在,您可以序列化该团队而不是原始团队。
如果不使用default-ctor并在之后设置属性:
var newTeam = new Team();
newTeam.Stuff = myOldTeam.Staff.Where(...);
这不需要对Team
课程进行任何更改,但是您必须在客户端做一些小工作。