private XmlNode SerializeToXmlElement(SettingsProperty setting, SettingsPropertyValue value) {
XmlDocument doc = new XmlDocument();
XmlElement valueXml = doc.CreateElement("value");
string serializedValue = value.SerializedValue as string;
if (serializedValue == null && setting.SerializeAs == SettingsSerializeAs.Binary) {
// SettingsPropertyValue returns a byte[] in the binary serialization case. We need to
// encode this - we use base64 since SettingsPropertyValue understands it and we won't have
// to special case while deserializing.
byte[] buf = value.SerializedValue as byte[];
if (buf != null) {
serializedValue = Convert.ToBase64String(buf);
}
}
if (serializedValue == null) {
serializedValue = String.Empty;
}
// We need to escape string serialized values
if (setting.SerializeAs == SettingsSerializeAs.String) {
serializedValue = Escaper.Escape(serializedValue);
}
valueXml.InnerXml = serializedValue;
XmlNode unwanted = null;
foreach (XmlNode child in valueXml.ChildNodes) {
if (child.NodeType == XmlNodeType.XmlDeclaration) {
unwanted = child;
break;
}
}
if (unwanted != null) {
valueXml.RemoveChild(unwanted);
}
return valueXml;
}