我需要从web.config中读取配置元素。 让这成为我的web.config。
<family>
<parents>
<child name="Hello"/>
<child name="World"/>
</parents>
<parents>
<child name="Hello1"/>
<child name="World2"/>
</parents>
</family>
所以我有这样的东西,我需要把它读成一个集合。 我怎么能这样做????
答案 0 :(得分:3)
通常,您可以在web.config(或app.config)中存储简单的应用程序设置和连接字符串,但任何更复杂的内容,如对象图或XML(如您的情况),您应该考虑不同的方法
这些可能会有所帮助:
(建议在应用设置中编码XML)
然而,最好有一个单独的XML数据文件,并使用Linq-To-XML(请参阅reference)或XPath以及XmlDocument和相关类将其转换为对象图。
编辑:请参阅另一个答案,该答案允许在配置文件中使用XML。这是对您确切问题的更直接的答案,但我会留在此处以供参考。总的来说,您的数据看起来像不是配置数据(更像是运行时/用户数据)并且不属于.config文件:所以我建议将其存储在单独的XML文件中,并且具有指向单独XML文件的文件名的配置文件条目。
希望有所帮助!
答案 1 :(得分:2)
您需要定义自己的自定义配置部分,这样您就可以正确读取嵌套配置元素。顺便说一下,这与其他所有人使用的方法相同,例如企业库组件,NHibernate等。
您需要采取的步骤非常简单,此处提供了一个教程:
答案 2 :(得分:0)
您需要使用ConfigurationElementCollection类。 请参阅MSDN上的this sample
答案 3 :(得分:0)
public struct Child
{
public string name;
public Child(string name)
{
this.name = name;
}
}
public class Parent
{
public List<Child> childs = new List<Child>();
public static List<Parent> ReadParentsFromXml(string fileName)
{
List<Parent> parents = new List<Parent>();
System.Xml.XmlTextReader doc = new System.Xml.XmlTextReader(fileName);
Parent element = new Parent();
while (doc.Read())
{
switch (doc.Name)
{
case "parents":
if (doc.NodeType == System.Xml.XmlNodeType.EndElement)
{
parents.Add(element);
element = new Parent();
}
break;
case "child":
if(doc.NodeType != System.Xml.XmlNodeType.EndElement)
element.childs.Add(new Child(doc.GetAttribute(0)));
break;
}
}
return parents;
}
}