C#从XML文件加载配置

时间:2012-09-18 17:26:23

标签: c# xml-serialization

我有一个控制台应用程序,它将由批处理文件触发。应用程序必须从XML文件加载配置才能运行...假设批处理文件向应用程序发送参数“Env1”。应用程序应通过序列化仅将“Env1”配置加载到c#类。 XML文件格式如下所示..

<EnvironmentCollection>
    <Environment>
        <Name>Env1</Name>
        <Url>....</Url>
    </Environment>
    <Environment>
        <Name>Env2</Name>
        <Url>....</Url>
    </Environment>
 </EnvironmentCollection>

任何帮助都将受到极大的赞赏 感谢

4 个答案:

答案 0 :(得分:1)

XDocument xDoc = XDocument.Load(file);
var dict = xDoc.Descendants("Environment")
                .ToDictionary(x => x.Element("Name").Value, 
                              x => x.Element("Url").Value);

并且用法是

var url = dict["Env1"];

答案 1 :(得分:0)

首先将EnvironmentCollection类标记为可序列化。然后,您可以使用以下代码将xml反序列化回对象:

    /// <summary>
    /// Deserializes xml file to object
    /// </summary>
    /// <param name="filePath"></param>
    /// <returns></returns>
    public static object DeSerializeFromXML(string filePath, Type type)
    {
        object data = null;
        System.IO.Stream stream = null;
        try
        {
            stream = System.IO.File.Open(filePath, System.IO.FileMode.Open);
            System.Xml.Serialization.XmlSerializer x = new System.Xml.Serialization.XmlSerializer(type);
            data = x.Deserialize(new System.Xml.XmlTextReader(stream));
            stream.Close();
            stream.Dispose();
        }
        catch (Exception ex)
        {
            try
            {
                stream.Close();
                stream.Dispose();
            }
            catch (Exception)
            {
            }
            throw new Exception(ex.Message);
        }
        return data;
    }

您可以像这样使用此功能:

    EnvironmentCollection col = (EnvironmentCollection)DeSerializeFromXML("myFile.xml", typeof(EnvironmentCollection));

答案 2 :(得分:0)

有很多方法,你谈到xml序列化,这需要你在C#中有一个可以处理xml的对象模型,或者从对象模型创建你的xml:http://www.dotnetjohn.com/articles.aspx?articleid=173

另一种非常简单的方法是将xml文档加载到xmldocument对象中并对其进行查询:http://csharp.net-tutorials.com/xml/using-xpath-with-the-xmldocument-class/

我提供了教程的链接,因为我认为你可以使用som背景知识来了解可能性,而不仅仅是一个完整的解决方案。

答案 3 :(得分:0)

您绝对没有理由配置加载到Xml。 .Net具有Configuration Class,允许您以强类型和强名称方式处理配置。您可以将appSettings用于简单的键值条目,也可以轻松定义自己的自定义配置部分(请参阅链接中的示例)。

话虽如此,codeplex上的Configuration Section Designer工具让您的生活更轻松。它允许您通过Visual Studio(包括2010)中的图形加载项定义节,并且它将自己生成自定义节的类定义。尝试一下,这太棒了: - )