 <p>I tried to use <code>ShouldSerialize</code> in various ways and the best I could get to was <code>&lt;value /&gt;</code>, couldn't make him not serialize an array item basically.</p> <p>But using a custom property to filter out what you don't want would work.</p> <pre><code>[XmlIgnore] public List&lt;XmlPropertyValue&gt; Values { get; set; } [XmlElement("value")] public List&lt;XmlPropertyValue&gt; ValuesForSerialization { get { var bla = Values.Where(o =&gt; o.ShouldSerializeValue()).ToList(); return bla; } set { Values = value; } } </code></pre> <p>Tested, it works. It's not a neat solution and neither is anything that adds public members to your class (just like <code>ShouldSerializeValue</code>).</p> <p>According to some <a href="http://blogs.msdn.com/b/sowmy/archive/2008/10/04/serializing-internal-types-using-xmlserializer.aspx" rel="nofollow">sources</a> you could make <code>ValuesForSerialization</code> internal if you use <code>DataContractSerializer</code> instead of <code>XmlSerializer</code>.</p>