从 XCrC # 获取字典

本文关键字:字典 获取 XCrC | 更新日期: 2023-09-27 18:35:06

我有一个如下所示的xml:

<NewDataSet>
<Person>
    <FirstName>abc</FirstName>
    <LastName>xyz</LastName>
    <Address>12345abc</Address>
</Person>
<Person>
    <FirstName>abcd</FirstName>
    <LastName>pqr_xyz</LastName>
    <Address>1111abc</Address>
</Person>
<Person>
    <FirstName>abcde</FirstName>
    <LastName>ghy_xyz</LastName>
    <Address>98765abc</Address>
</Person>
</NewDataSet>

现在我想把这个xml放到字典里。以下是我正在使用的代码。

 string data =
 @"<NewDataSet><Person>...";
 XDocument doc = XDocument.Parse(data); 
 Dictionary<string, string> dataDictionary = new Dictionary<string, string>();
 foreach (XElement elem in doc.Descendants("Person"))
    {
        var row = elem.Descendants();
        string str = elem.ToString();
        foreach (XElement element in row)
        {
           string keyName = element.Name.LocalName;
           dataDictionary.Add(keyName, element.Value);
        }
        yield return dataDictionary;
    }

现在此代码不起作用。我知道某处有一个愚蠢的错误,有人可以帮我吗?这是一个有点类似的要求示例,将 xdocument 转换为 IEnumerable<string、object>>,但我也无法让它工作。

谢谢

从 XCrC # 获取字典

您尝试使用引发参数异常的 dataDictionary 对象的同一实例。已添加具有相同键的项目。要更正此问题,您需要在每个循环的第一个循环中初始化 dataDictionary。

        Dictionary<string, string> dataDictionary = null;
        foreach (XElement elem in doc.Descendants("Person")) 
        { 
            var row = elem.Descendants(); 
            string str = elem.ToString();
            dataDictionary = new Dictionary<string, string>();
            foreach (XElement element in row) 
            { 
                string keyName = element.Name.LocalName; 
                dataDictionary.Add(keyName, element.Value); 
            } 
            yield return dataDictionary; 
        } 

您可以在循环访问时添加到列表中:

var list = new List<Dictionary<string, string>>();
foreach (XElement elem in doc.Descendants("Person"))
{
    var dataDictionary = new Dictionary<string,string>();
    var row = elem.Descendants();
    foreach (XElement element in row)
    {
       string keyName = element.Name.LocalName;
       dataDictionary.Add(keyName, element.Value);
    }
    list.Add(dataDictionary);
}
var enumDict = list.AsEnumerable();

我在这里假设你想要一个字典对象列表,每个人都表示为字典。 不过重新阅读这个问题,我不确定这就是你所追求的......