protected virtual void WriteXmlElements(XmlWriter writer) { writer.WriteElementString("Title", Title); writer.WriteNonEmptyElementString("PositionTitle", PositionTitle); if (!BulletPoints.IsNullOrEmpty()) { writer.WriteStartElement("BulletPoints"); foreach (string bulletPoint in BulletPoints) { writer.WriteElementString("BulletPoint", bulletPoint); } writer.WriteEndElement(); // </BulletPoints> } writer.WriteNonEmptyElementString("Summary", Summary); writer.WriteElementString("Content", Content); writer.WriteNonEmptyElementString("EmployerCompanyName", EmployerCompanyName); writer.WriteElementString("JobTypes", JobTypes.SerializeEnum()); writer.WriteNonEmptyElementString("Location", Location); if (Salary != null && !Salary.IsEmpty) { writer.WriteStartElement("Salary"); WriteXml(writer, Salary); writer.WriteEndElement(); // </Salary> } writer.WriteNonEmptyElementString("PackageDetails", PackageDetails); writer.WriteNonEmptyElementString("Postcode", Postcode); writer.WriteElementString("ResidencyRequired", XmlConvert.ToString(ResidencyRequired)); // This is the whole reason for custom XML seialization: ContactDetails class writing an // OPTIONAL ContactPerson element. if (ContactDetails != null) { WriteContactPersonXml(writer, ContactDetails); WriteContactDetailsXml(writer, ContactDetails); } writer.WriteStartElement("Industries"); if (Industries != null) { foreach (var industry in Industries) { writer.WriteStartElement("Industry"); writer.WriteString(industry); writer.WriteEndElement(); // </Industry> } } writer.WriteEndElement(); // </Industries> writer.WriteNonEmptyElementString("ExternalApplyUrl", ExternalApplyUrl); writer.WriteNonEmptyElementString("CssFilename", CssFilename); }