Comment lire le XML personnalisé à partir du fichier app.config?

Je souhaite lire la section XML personnalisée à partir du app.config d’un service Windows C #.

Comment puis-je m’y prendre?

Le XML est ci-dessous:

     

Ce que vous voulez faire est de lire les sections de configuration personnalisées .

Dans un projet que j’ai développé, j’utilise quelque chose de similaire pour la configuration que j’ai trouvée. Je crois que l’article s’appelait le dernier gestionnaire de section de configuration dont j’aurais besoin (je ne trouve pas de lien fonctionnel, peut-être que quelqu’un peut le relier pour moi).

Cette méthode va plus loin dans ce que vous voulez faire et désérialise réellement l’object en mémoire. Je ne fais que copier du code de mon projet, mais il devrait être assez simple de revenir en arrière si vous ne voulez que du XML.

Tout d’abord, vous devez définir une classe qui gère vos parameters de configuration.

 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(); ssortingng typename = (ssortingng)nav.Evaluate("ssortingng(@type)"); Type t = Type.GetType(typename); XmlSerializer ser = new XmlSerializer(t); return ser.Deserialize(new XmlNodeReader(section)); } #endregion } } 

Maintenant, supposons que vous vouliez charger une section de configuration … super facile, définissez le type d’object que vous souhaitez utiliser pour la sérialisation XML et transmettez la section que vous recherchez (dans ce cas, 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; } 

Maintenant, tout ce dont vous avez besoin est votre fichier App.config. J’ai choisi de scinder le mien en fichiers séparés (1 fichier par section) uniquement pour faciliter la gestion de la configuration. Vous définissez une section, lui donnez un nom et définissez le type (quel que soit le nom de la classe répertoriée ci-dessus) et le nom de l’assembly.

App.config:

    

Il ne rest plus que le fichier de configuration à désérialiser. Ce qui est important ici est que le bloc corresponde au nom de votre section et que votre type soit l’object avec lequel il doit se désérialiser, ainsi que le nom de l’assemblage.

   4  

Si vous souhaitez uniquement du code XML pur et brut, il vous suffit de modifier l’object qui gère la section pour renvoyer le code XML ou de faire tout ce que vous devez faire.

Puisque IConfigurationSectionHandler est obsolète, j’ai pensé qu’il était utile de mentionner que vous pouvez toujours implémenter une section sérialisée pure en remplaçant simplement ConfigurationSection.DeserializeSection et en n’appelant pas l’implémentation de base.

Voici un exemple très basique que je réutilise beaucoup. Une section de configuration simple qui charge un graphe d’object à partir de XAML en ligne. (Naturellement, vous pouvez implémenter avec XmlSerializer place)

 using System.Configuration; using System.Xaml; using System.Xml; ... public class XamlConfigurationSection : ConfigurationSection { public static XamlConfigurationSection Get(ssortingng sectionName) { return (XamlConfigurationSection)ConfigurationManager.GetSection(sectionName); } public T Content { get; set; } protected override void DeserializeSection(XmlReader xmlReader) { xmlReader.Read(); using (var xamlReader = new XamlXmlReader(xmlReader)) Content = (T)XamlServices.Load(xamlReader); } } 

J’utilise XML personnalisé dans mon config.app. fichier et créer un app.XSD à partir de celui-ci. Le fichier XSD inclut le schéma du fichier config.app. Ensuite, le fichier XSD peut être traduit en une classe vb ou un fichier de classe C # à l’aide de ‘xsd.exe’. Maintenant, tout ce que vous avez à faire est de désérialiser le fichier de configuration dans la classe.

    
QAS