In un progetto che ho sviluppato uso qualcosa di simile per la configurazione che ho trovato. Credo che l'articolo sia stato chiamato l'ultimo gestore di sezioni di configurazione di cui avrò mai bisogno (non riesco a trovare un collegamento funzionante, forse qualcuno può collegarlo per me).
Questo metodo prende ciò che si desidera fare un ulteriore passo avanti e in realtà deserializza l'oggetto in memoria. Sto solo copiando il codice dal mio progetto, ma dovrebbe essere abbastanza semplice fare un passo indietro se tutto ciò che vuoi è l'XML.
Innanzitutto, è necessario definire una classe che gestisca le impostazioni di configurazione.
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
}
}
Ora, diciamo che si desidera caricare una sezione di configurazione ... super facile, gettato al tipo di oggetto che si aspetta di XML serializzare, e passare la sezione che si sta cercando (in questo caso SearchSettings
.
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;
}
Ora, tutto ciò che serve è il file App.config. ho scelto di dividere la mia in file separati (1 file per sezione) solo per rendere la gestione della configurazione di un po 'più facile. si definisce un sezione, dargli un nome e definire il tipo (qualunque sia la classe sopra elencata) e il nome dell'assembly.
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>
Ora, tutto quello che resta è il file di configurazione per essere de-serializzato. Ciò che è importante qui è che il blocco corrisponde al nome della sezione, e il tuo tipo è l'oggetto a cui deve essere de-serializzato e il nome dell'Assembly.
<?xml version="1.0" encoding="utf-8" ?>
<SearchSettings type="Eagle.Search.SearchSettings, Eagle">
<NumThreads>4</NumThreads>
</SearchSettings>
Se si desidera solo l'XML grezzo puro, tutto cio che dovrete fare è modificare l'oggetto che gestisce la sezione di restituire l'XML o fare quello che devi fare.
Ti manca il tuo XML o è stato ingoiato in qualche modo. –
Non rimanere bloccato su come XML * dovrebbe * apparire in app.config. Sii felice che funzioni. – Will