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文件。太好了……我只是想知道这一点。谢谢。