没有null XMLArray的XML序列化

让我直截了当。 如果XMLArray元素为null,是否可以不序列化它? 如下面的XML“详细信息”一样。 如果它为null,是否可以不用XML。 请检查我的代码,并会对它有一些想法。

99999  1 2013-02-13 2013-03-15 27624642 Images\20130315\10_00000030_00000 SEK  999999   10    99999    AA AAAA    
170.36 1590.00

 [Serializable] public class Invoice { private Header _header = new Header(); private Summary _summary = new Summary(); private List _details = new List(); [XmlElement("InvoiceNo")] public string InvoiceNo { get; set; } [XmlElement("Header")] public Header Header { get { return _header; } set { _header = value; } } [XmlArray("Details"), XmlArrayItem("Detail", typeof(Detail), IsNullable=false)] public List Details { get { return _details; } set { _details = value; } } [XmlElement("Summary")] public Summary Summary { get { return _summary; } set { _summary = value; } } } [XmlType(TypeName = "Detail"), Serializable] public class Detail { private Product _product = new Product(); static CultureInfo ci = CultureInfo.InvariantCulture; private float _lineTotExclTax = 0; [XmlElement("LineNo")] public int LineNo { get; set; } [XmlIgnore] public float LineTotExclTax { get { return _lineTotExclTax; } set { _lineTotExclTax = value; } } [XmlElement("LineTotExclTax")] public string CustomLineTotExclTax { get { return LineTotExclTax.ToString("#0.00", ci); } set { float.TryParse(value, NumberStyles.Float, ci, out _lineTotExclTax); } } [XmlElement("Products")] public Product Product { get { return _product; } set { _product = value; } } } 

如果列表确实为null忽略它。 要获得您显示的输出,它必须是一个空的非null列表,可能是由于field-initializer:

 private List _details = new List(); 

如果你不能使它为null ,那么考虑ShouldSerialize*

 [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] public bool ShouldSerializeDetails() { return _details != null && _details.Count != 0; } 

这定义了应该/不应该序列化属性Details的自定义规则。