. XML I, xml: space = preserve. IXmlSerializable ( , ). , - ( / XML). WriteSettings() WriteXml(), IXmlSerializable.
public static void WriteSettings(XmlWriter writer, Dictionary<string, string> settings)
{
foreach (string key in settings.Keys)
{
string value = settings[key];
writer.WriteStartElement("Setting");
writer.WriteElementString("SettingType", key);
writer.WriteStartElement("SettingValue");
if (value != value.Trim())
writer.WriteAttributeString("xml", "space", null, "preserve");
writer.WriteString(value);
writer.WriteEndElement();
writer.WriteEndElement();
}
}
XML, ( , , WriteSettings ):
<ResourceSettings>
<Setting>
<SettingType>SomeSettingName</SettingType>
<SettingValue>1</SettingValue>
</Setting>
<Setting>
<SettingType>AnotherSettingName</SettingType>
<SettingValue xml:space="preserve"> </SettingValue>
</Setting>
<Setting>
<SettingType>ADifferentSettingName</SettingType>
<SettingValue>some other value</SettingValue>
</Setting>
</ResourceSettings>
, , , XmlReader xml: space = preserve, :
public void ReadXml(XmlReader reader)
{
_cache = new Dictionary<string, string>(StringComparer.InvariantCultureIgnoreCase);
if (reader.MoveToContent() == XmlNodeType.Element && reader.LocalName == "ResourceSettings")
{
if (reader.ReadToDescendant("Setting"))
{
while (reader.MoveToContent() == XmlNodeType.Element && reader.LocalName == "Setting")
{
reader.ReadStartElement("Setting");
string key = reader.ReadElementString("SettingType");
string value = reader.ReadElementString("SettingValue");
reader.ReadEndElement();
_cache.Add(key, value);
}
}
reader.Read();
}
}