protected internal override bool SerializeElement(XmlWriter writer, bool serializeCollectionKey) {
ConfigurationElementCollectionType type = CollectionType;
bool DataToWrite = false;
DataToWrite |= base.SerializeElement(writer, serializeCollectionKey);
if (type == ConfigurationElementCollectionType.AddRemoveClearMap ||
type == ConfigurationElementCollectionType.AddRemoveClearMapAlternate) {
// it is possible that the collection only has to be cleared and contains
// no real elements
if (bEmitClearTag == true && (_clearElement.Length != 0)) {
if (writer != null) {
writer.WriteStartElement(_clearElement);
writer.WriteEndElement();
}
DataToWrite = true;
}
}
foreach (Entry entry in _items) {
if (type == ConfigurationElementCollectionType.BasicMap ||
type == ConfigurationElementCollectionType.BasicMapAlternate) {
if (entry._entryType == EntryType.Added || entry._entryType == EntryType.Replaced) {
if (ElementName != null && ElementName.Length != 0) {
if (BaseConfigurationRecord.IsReservedAttributeName(ElementName)) {
throw new ArgumentException(SR.GetString(SR.Basicmap_item_name_reserved, ElementName));
}
DataToWrite |= entry._value.SerializeToXmlElement(writer, ElementName);
}
else {
DataToWrite |= entry._value.SerializeElement(writer, false);
}
}
}
else if (type == ConfigurationElementCollectionType.AddRemoveClearMap ||
type == ConfigurationElementCollectionType.AddRemoveClearMapAlternate) {
if ((entry._entryType == EntryType.Removed ||
entry._entryType == EntryType.Replaced) &&
entry._value != null) {
if (writer != null) {
writer.WriteStartElement(_removeElement);
}
DataToWrite |= entry._value.SerializeElement(writer, true);
if (writer != null) {
writer.WriteEndElement();
}
DataToWrite = true;
}
if (entry._entryType == EntryType.Added || entry._entryType == EntryType.Replaced) {
DataToWrite |= entry._value.SerializeToXmlElement(writer, _addElement);
}
}
}
return DataToWrite;
}