将 App.Config 数据解析为对象列表

Posted

技术标签:

【中文标题】将 App.Config 数据解析为对象列表【英文标题】:Parsing App.Config data to a list of objects 【发布时间】:2013-05-25 10:33:22 【问题描述】:

首先,我不确定解决此问题的最佳方法是什么,但这是我的场景,我有大量帐户需要在测试套件中读取。我打算将它们以 xml 格式存储在 app.config 文件中,并以这种方式读取帐户。这是最好的方法吗?我应该改用 JSON 吗? 无论如何,我在这里尝试过这种方法:

http://www.codeproject.com/Articles/6730/Custom-Objects-From-the-App-Config-file 虽然我用ConfigurationManager.GetSection();而不是ConfigurationSettings.GetConfig(),因为它已被弃用。但是,我必须下载一个自定义的 ConfigSectionHandler,在尝试使用时总是遇到空指针异常。

我要解析的 xml 格式为:

<testConfig>
    <accounts>
        <account>
            <name>foo</name>
            <password>bar</password>
            <description/>cool account</description>
        </account>
        <account>
            <name>bar</name>
            <password>foo</password>
            <description/>uncool account</description>
        </account>
    </accounts>
</testConfig> 

如果我能把它解析成一个 Account 对象列表就好了,我已经定义了 Account 类

【问题讨论】:

您是否考虑过将其存储在单独的 XML 文件中,然后使用 LINQ to SQL 访问它? 【参考方案1】:

试试这个:

使用var xDoc = XDocument.Parse(xmlString); 如果您要将XML 加载到字符串并将其放入XDocument。但是,您可以直接使用var xDoc = XDocument.Load(@"XMLPathGoesHere"); 直接加载xml。

示例帐户对象:

public class Account

    public string Name  get; set; 
    public string Password  get; set; 
    public string Description  get; set; 

然后使用下面的 LINQ 查询:

var accounts = (from xElem in xDoc.Descendants("account")
                select new Account()
                
                    Name = xElem.Element("name").Value ?? string.Empty,
                    Password = xElem.Element("password").Value ?? string.Empty,
                    Description = xElem.Element("description").Value ?? string.Empty
                ).ToList();

还请记下您的 XML 部分,&lt;description/&gt;uncool account&lt;/description&gt;。我猜这部分应该是&lt;description&gt;uncool account&lt;/description&gt;

我的 LINQ 垫转储结果

【讨论】:

以上是关于将 App.Config 数据解析为对象列表的主要内容,如果未能解决你的问题,请参考以下文章

如何解析 JSON 中的所有数据?

JAXB - java xml解析

Azure 数据流:从 JSON 字符串解析对象的嵌套列表

将 json 列表解析为 Java 对象列表

将 JSON 解析为 Dart 中的列表

numpy——列表筛选及解方程式