繁体   English   中英

保存字典 <int, List<Object> &gt;使用LINQ将数据转换为XML文件

[英]Save a Dictionary<int, List<Object>> data to XML file using LINQ

我想将Dictionary<int, List<Object>>数据写入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);

我的预期输出是:

<AUTHORDATA>
  <AUTHOR>
    <ID>1</ID>
    <NAME>Tom</NAME>
    <AGE>25</AGE>
  </AUTHOR>
  <AUTHOR>
    <ID>2</ID>
    <NAME>Jerry</NAME>
    <AGE>15</AGE>
  </AUTHOR>
</AUTHORDATA>

但是,我得到以下XML文件中的记录:

 <AUTHORDATA>
   <AUTHOR>
      <ID>2</ID>
      <NAME>Jerry</NAME>
      <AGE>15</AGE>
    </AUTHOR>
 </AUTHORDATA>

每次只在XML文件中写入最后一个List记录。 我怎样才能解决这个问题 ? 注意:XML文件的格式与上面类似。

任何帮助表示赞赏。

[EDIT]抱歉,我对您的要求有误解:

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);

您需要将在循环中AUTHORDATA节点添加到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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM