当前位置:  开发笔记 > 编程语言 > 正文

如何从app.config读取自定义XML?

如何解决《如何从app.config读取自定义XML?》经验,为你挑选了2个好方法。

我想从app.configC#windows服务中读取自定义XML部分.

我该怎么办呢?

XML如下:





Kevin Nisbet.. 14

在我开发的项目中,我使用了类似于我发现的配置.我相信这篇文章被称为我需要的最后一个配置部分处理程序(我找不到工作链接,也许有人可以为我链接它).

此方法将您想要做的更进一步,并实际将对象反序列化到内存中.我只是从我的项目中复制代码,但如果你想要的只是XML,那么倒退就应该相当简单.

首先,您需要定义一个处理配置设置的类.

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
    }
}

现在,假设您要加载一部分配置...超级简单,转换为您期望XML序列化的对象类型,并传递您正在寻找的部分(在这种情况下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;
}

现在,您只需要App.config文件即可.我选择将我分成单独的文件(每个部分1个文件),以便更轻松地管理配置.您可以定义一个部分,为其命名,并定义类型(无论您将上面列出的类称为什么)和程序集的名称.

App.config中:



  
    

现在,剩下的就是要反序列化的配置文件.这里重要的是该块与您的节名称匹配,您的类型是它应该反序列化的任何对象,以及程序集名称.



  4

如果您只想要纯原始XML,那么您需要做的就是修改处理该部分的Object以返回XML或执行您需要做的任何事情.



1> Kevin Nisbet..:

在我开发的项目中,我使用了类似于我发现的配置.我相信这篇文章被称为我需要的最后一个配置部分处理程序(我找不到工作链接,也许有人可以为我链接它).

此方法将您想要做的更进一步,并实际将对象反序列化到内存中.我只是从我的项目中复制代码,但如果你想要的只是XML,那么倒退就应该相当简单.

首先,您需要定义一个处理配置设置的类.

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
    }
}

现在,假设您要加载一部分配置...超级简单,转换为您期望XML序列化的对象类型,并传递您正在寻找的部分(在这种情况下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;
}

现在,您只需要App.config文件即可.我选择将我分成单独的文件(每个部分1个文件),以便更轻松地管理配置.您可以定义一个部分,为其命名,并定义类型(无论您将上面列出的类称为什么)和程序集的名称.

App.config中:



  
    

现在,剩下的就是要反序列化的配置文件.这里重要的是该块与您的节名称匹配,您的类型是它应该反序列化的任何对象,以及程序集名称.



  4

如果您只想要纯原始XML,那么您需要做的就是修改处理该部分的Object以返回XML或执行您需要做的任何事情.



2> Colin Mackay..:

您想要做的是阅读自定义配置部分.


祝您有足够勇气做到这一点的新手有个好运!对于新开发人员,他们可能会感到非常困惑。
确实,你实现接口并使用XML的.NET 1.x方式更容易理解,IMO.
我发现这篇关于codeproject(http://www.codeproject.com/KB/dotnet/mysteriesofconfiguration.aspx)的系列文章是对该主题的一个很好的解释.
推荐阅读
雨天是最美
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有