C# 保存字典<;int,List<;对象>&燃气轮机;使用LINQ将数据转换为XML文件
我想将C# 保存字典<;int,List<;对象>&燃气轮机;使用LINQ将数据转换为XML文件,c#,.net,xml,linq,C#,.net,Xml,Linq,我想将字典数据写入XML文件。我尝试了以下代码: Dictionary<int, List<Author>> _empdata = new Dictionary<int, List<Author>>(); List<Author> _author1 = new List<Author> { new Author() { id = 1, name = "Tom", age = 25 } }; List<Author>
字典
数据写入XML文件。我尝试了以下代码:
Dictionary<int, List<Author>> _empdata = new Dictionary<int, List<Author>>();
List<Author> _author1 = new List<Author> { new Author() { id = 1, name = "Tom", age = 25 } };
List<Author> _author2 = new List<Author> { new Author() { id = 2, name = "Jerry", age = 15 } };
_empdata.Add(1, _author1);
_empdata.Add(2, _author2);
string fileName = "Author_" + string.Format("{0:yyyy-MM-dd_hh-mm-ss-tt}", DateTime.Now);
string filePath = Path.Combine(Directory.GetCurrentDirectory(), fileName) + ".xml";
XElement elem = new XElement("StackOverflow");
foreach (KeyValuePair<int,List<Author>> pair in _empdata)
{
elem = new XElement("AUTHORDATA",
from item in pair.Value
select new XElement("AUTHOR",
new XElement("ID", item.id),
new XElement("NAME", item.name),
new XElement("AGE", item.age)
));
}
elem.Save(filePath);
Dictionary\u empdata=newdictionary();
列表_author1=新列表{new Author(){id=1,name=“Tom”,age=25};
列表_author2=新列表{new Author(){id=2,name=“Jerry”,age=15};
_添加(1,_author1);
_添加(2,_author2);
string fileName=“Author_”+string.Format({0:yyyy-MM-dd_hh-MM-ss-tt}),DateTime.Now);
字符串filePath=Path.Combine(Directory.GetCurrentDirectory(),fileName)+“.xml”;
XElement elem=新XElement(“堆栈溢出”);
foreach(empdata中的KeyValuePair对)
{
elem=新的XElement(“AUTHORDATA”,
来自成对项。值
选择新元素(“作者”,
新元素(“ID”,项目ID),
新XElement(“名称”,项目名称),
新元素(“年龄”,项目年龄)
));
}
元素保存(文件路径);
我的预期产出是:
<AUTHORDATA>
<AUTHOR>
<ID>1</ID>
<NAME>Tom</NAME>
<AGE>25</AGE>
</AUTHOR>
<AUTHOR>
<ID>2</ID>
<NAME>Jerry</NAME>
<AGE>15</AGE>
</AUTHOR>
</AUTHORDATA>
1.
汤姆
25
2.
杰瑞
15
但是,我在XML文件中得到以下记录:
<AUTHORDATA>
<AUTHOR>
<ID>2</ID>
<NAME>Jerry</NAME>
<AGE>15</AGE>
</AUTHOR>
</AUTHORDATA>
2.
杰瑞
15
每次只在XML文件中写入最后一条列表记录。我怎样才能解决这个问题?注意:XML文件的格式如上所示
非常感谢您的帮助。[EDIT]Awww抱歉,我误解了您的请求:
XElement ad = new XElement("AUTHORDATA");
XElement elem = new XElement("StackOverflow", ad);
foreach (KeyValuePair<int, List<Author>> pair in _empdata)
{
ad.Add(new XElement("AUTHORDATA",
from item in pair.Value
select new XElement("AUTHOR",
new XElement("ID", item.id),
new XElement("NAME", item.name),
new XElement("AGE", item.age)
));
}
elem.Save(filePath);
XElement ad=新XElement(“AUTHORDATA”);
XElement elem=新XElement(“堆栈溢出”,ad);
foreach(empdata中的KeyValuePair对)
{
ad.Add(新的XElement(“AUTHORDATA”),
来自成对项。值
选择新元素(“作者”,
新元素(“ID”,项目ID),
新XElement(“名称”,项目名称),
新元素(“年龄”,项目年龄)
));
}
元素保存(文件路径);
您需要将在循环中创建的节点添加到AUTHORDATA
节点:
var authorData = new XElement("AUTHORDATA");
var root = new XElement("StackOverflow", authorData);
foreach (KeyValuePair<int,List<Author>> pair in _empdata)
{
authorData.Add(
from item in pair.Value
select new XElement("AUTHOR",
new XElement("ID", item.id),
new XElement("NAME", item.name),
new XElement("AGE", item.age)
));
}
root.Save(filePath);
var authorData=new-XElement(“authorData”);
var root=new-XElement(“StackOverflow”,authorData);
foreach(empdata中的KeyValuePair对)
{
authorData.Add(
来自成对项。值
选择新元素(“作者”,
新元素(“ID”,项目ID),
新XElement(“名称”,项目名称),
新元素(“年龄”,项目年龄)
));
}
root.Save(文件路径);
抱歉,它不起作用。它只保存最后一次迭代结果。请检查我的代码。XML文件正在动态创建,我没有编辑XML文件。太好了……我只是想知道这一点。谢谢。