C# 从IList创建XML文件

C# 从IList创建XML文件,c#,ilist,C#,Ilist,我要和一个IList一起工作 我可以循环列表中的行并从中创建一个XML文件吗?如果是这样的话,我该怎么做呢 我一直在尝试使用XDocument,但我看不出如何使用此方法在IList中循环。如果您只是从字符串列表中获取一个相当简单的结构,那么这将起作用: var list = new List<string> { "Joe", "Jim", "John" }; var document = new XDocument(); var root = new XElement("Root"

我要和一个IList一起工作

我可以循环列表中的行并从中创建一个XML文件吗?如果是这样的话,我该怎么做呢


我一直在尝试使用XDocument,但我看不出如何使用此方法在IList中循环。

如果您只是从字符串列表中获取一个相当简单的结构,那么这将起作用:

var list = new List<string> { "Joe", "Jim", "John" };

var document = new XDocument();
var root = new XElement("Root");
document.Add(root);
list.ForEach(x => root.Add(new XElement("Name", x)));
var list=新列表{“乔”、“吉姆”、“约翰”};
var document=new XDocument();
变量根=新的元素(“根”);
document.Add(root);
ForEach(x=>root.Add(new-XElement(“Name”,x));
如果需要,请将
System.Xml.Serialization
添加到项目的引用中,并:

using System;
using System.Collections.Generic;
using System.Xml.Serialization;

public class Program {
    static void Main() {
        List<string> Data=new List<string> { "A","B","C","D","E" };

        XmlSerializer XMLs=new XmlSerializer(Data.GetType());
        XMLs.Serialize(Console.Out,Data);

        Console.ReadKey(true);
    }
}
使用系统;
使用System.Collections.Generic;
使用System.Xml.Serialization;
公共课程{
静态void Main(){
列表数据=新列表{“A”、“B”、“C”、“D”、“E”};
XmlSerializer XMLs=新的XmlSerializer(Data.GetType());
序列化(Console.Out、Data);
Console.ReadKey(true);
}
}
我使用了
Console.Out
为您提供了一个简单的示例,但您可以选择任何
,很可能是要写入的文件。

分两行:

IList<string> list  = new List<string> {"A", "B", "C"};
var doc = new XDocument(new XElement("Root", list.Select(x => new XElement("Child", x))));
如果原始的
IList
是非通用的
IList
,则需要包括对
Enumerable.Cast()
的调用,以便
Select()
可以工作。例如:

IList list  = new List<string> {"A", "B", "C"};
var doc = new XDocument(new XElement("Root",
    list.Cast<string>().Select(x => new XElement("Child", x))));
IList list=新列表{“A”、“B”、“C”};
var doc=新的XDocument(新的XElement(“根”),
list.Cast().Select(x=>newxelement(“Child”,x));

您可以创建一个字符串,将列表值保存到字符串中的变量,并调用Load函数在节点之间循环。您需要更清楚地了解。你有什么样的工作清单?您的XML需要看起来像什么?您能在这里显示您的列表容器吗?当然,你的XCODE代码结构?你应该考虑使用。我删除了我的注释,因为我去了<代码>字符串方法,它不涉及<代码> xObjs,因此超出了范围。请注意,不能使用
XMLSerializer
直接序列化接口列表,因此必须手动转换这些项。这意味着您必须将第二个列表中的项目具体化,例如:从
list
IList
或类似的列表,然后再将其输入序列化程序。我的列表是IList,IList不喜欢。ForEach-您可以建议吗?使用。选择@Alex Joukovsky提供的解决方案。同一问题-IList不包含定义为select,感谢您的帮助!我的列表是一个IList,IList不喜欢。选择-你能建议吗?我正在使用所有这些,仍然有相同的issues@MatthewHarris如果先在IList上调用.ToList()或.ToArray(),会怎么样?如果列表很大,这可能会影响性能,并且还会破坏LINQ查询提供的“惰性链”(=列表将在此时进行评估,而不是在最后一刻仅使用所需的元素)。但这取决于你是否需要懒惰。
IList list  = new List<string> {"A", "B", "C"};
var doc = new XDocument(new XElement("Root",
    list.Cast<string>().Select(x => new XElement("Child", x))));