从 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
谢谢
您尝试使用引发参数异常的 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();
我在这里假设你想要一个字典对象列表,每个人都表示为字典。 不过重新阅读这个问题,我不确定这就是你所追求的......