En un proyecto que desarrollé uso algo similar para la configuración que encontré. Creo que el artículo fue llamado el último controlador de sección de configuración que alguna vez necesitaré (no puedo encontrar un enlace que funcione, tal vez alguien pueda vincularlo para mí).
Este método lleva lo que usted desea dar un paso más allá, y realmente deserializa el objeto en la memoria. Solo estoy copiando el código de mi proyecto, pero debería ser bastante simple dar un paso atrás si lo único que quieres es el XML.
Primero, debe definir una clase que maneje sus configuraciones.
using System;
using System.Configuration;
using System.Xml;
using System.Xml.Serialization;
using System.Xml.XPath;
namespace Ariel.config
{
class XmlSerializerSectionHandler : IConfigurationSectionHandler
{
#region IConfigurationSectionHandler Members
public object Create(object parent, object configContext, XmlNode section)
{
XPathNavigator nav = section.CreateNavigator();
string typename = (string)nav.Evaluate("string(@type)");
Type t = Type.GetType(typename);
XmlSerializer ser = new XmlSerializer(t);
return ser.Deserialize(new XmlNodeReader(section));
}
#endregion
}
}
Ahora, supongamos que desea cargar una sección de configuración ... super fácil, fundido con el tipo de objeto que está esperando a XML Serialize a, y pasar la sección que está buscando (en SearchSettings
este caso.
try
{
config = (Eagle.Search.SearchSettings)ConfigurationSettings.GetConfig("SearchSettings");
}
catch (System.Configuration.ConfigurationException ex)
{
syslog.FatalException("Loading search configuration failed, you likely have an error", ex);
return;
}
Ahora, todo lo que necesita es su archivo app.config. elegí para dividir la mina en archivos separados (1 archivo por sección) sólo para hacer la gestión de la configuración un poco más fácil. se define una sección, asígnele un nombre y defina el tipo (como llame a la clase enumerada arriba) y el nombre del ensamblado.
App.config:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="SearchSettings" type="Ariel.config.XmlSerializerSectionHandler, Ariel"/>
</configSections>
<SearchSettings configSource="Config\Search.config" />
</configuration>
Ahora, todo lo que queda es el archivo de configuración a ser serializado de-. Lo que es importante aquí es que el bloque coincide con el nombre de su sección, y su tipo es el objeto al que debe deserializar, y el nombre del ensamblado.
<?xml version="1.0" encoding="utf-8" ?>
<SearchSettings type="Eagle.Search.SearchSettings, Eagle">
<NumThreads>4</NumThreads>
</SearchSettings>
Si lo que desea es el XML prima pura, todo lo que necesitará hacer es modificar el objeto que se encarga de la sección de devolver el XML o hacer lo que tiene que hacer.
Se ha perdido su XML o se tragó de alguna manera. –
No te quedes atascado sobre cómo debe verse * XML * en app.config. Solo sé feliz de que funcione. – Will