我有一个像下面这样的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;
}
现在这段代码无效了。我知道某处有一个愚蠢的错误,有人可以帮帮我吗? 这是一个有点类似的需求convert xdocument to IEnumerable<Dictionary<string, object>>的示例,但我也无法使其工作。
感谢,
答案 0 :(得分:3)
您试图使用引发参数异常的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;
}
答案 1 :(得分:0)
您可以在循环时添加到列表中:
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();
我假设您想要一个Dictionary对象列表,每个人都表示为字典。重读这个问题,我不确定那是你所追求的......