C# XmlSerializer-显示项目数组

C# XmlSerializer-显示项目数组,c#,xml,xmlserializer,C#,Xml,Xmlserializer,我有一个如下所示的XML文件: <ROOT><DOC> ... </DOC><DOC> ... </DOC><DOC> ... </DOC></ROOT> 。。。 我想把所有的文档放在一个数组中。 在C#(XmlSerializer)中如何实现这一点?可能取决于框架版本。我有.NETV4,并将以下类与XmlSerializer一起使用 感谢@Reniuz对错误的提示。下面是一个完整的工作示例: p

我有一个如下所示的XML文件:

<ROOT><DOC> ... </DOC><DOC> ... </DOC><DOC> ... </DOC></ROOT>
。。。
我想把所有的文档放在一个数组中。
在C#(XmlSerializer)中如何实现这一点?

可能取决于框架版本。我有.NETV4,并将以下类与XmlSerializer一起使用

感谢@Reniuz对错误的提示。下面是一个完整的工作示例:

public class Document
{
    [XmlAttribute]
    public string Value { get; set; }
}

[XmlRoot("ROOT")]
public class Root
{
    [XmlElement("DOC")]
    public List<Document> Documents { get; set; }
}
公共类文档
{
[XmlAttribute]
公共字符串值{get;set;}
}
[XmlRoot(“根”)]
公共类根
{
[XmlElement(“DOC”)]
公共列表文档{get;set;}
}
使用此代码加载:

string data = "<ROOT><DOC Value=\"adhfjasdhf\"></DOC><DOC Value=\"asldfhalsdh\"></DOC></ROOT>";
XmlSerializer serializer = new XmlSerializer(typeof(Root));
using (StringReader sr = new StringReader(data))
{
    Root root = serializer.Deserialize(sr) as Root;
}
字符串数据=”;
XmlSerializer serializer=新的XmlSerializer(typeof(Root));
使用(StringReader sr=新StringReader(数据))
{
根根=序列化程序。反序列化(sr)为根;
}

请注意标记区分大小写。

本质上,您需要一个包含XML的字符串、一个用于读取字符串的StringReader、一个用于从StringReader读取提要的XMLReader和一个用于存储来自XMLReader的提要的XDocument。这可以在一行代码中完成,如下所示:

XDocument xDoc = XDocument.Load (XmlReader.Create (new StringReader (xmlString)));
xmlString是您正在读取的文件的路径(和名称)。您应该使用一个列表来存储您将获得的数据(除非它是一个设置的数字,否则您可以只使用字符串[])

要使其成为数组,请使用:

docList.ToArray();

我希望这有帮助!祝你好运。

这是正确的答案,基于Magicbjorn答案:

首先,我从StreamReader获取字符串

    using(StreamReader read = new StreamReader("FilePath.xml"))
    {
        XDocument xDoc = XDocument.Load(XmlReader.Create(read));
        List<string> docList = new List<string>();

        var root = xDoc.Element("ROOT");
        foreach (var element in root.Elements("DOC"))
        {
            string s = element.Value;
            docList.Add(s);
        }
    }
使用(StreamReader read=newstreamreader(“FilePath.xml”))
{
XDocument xDoc=XDocument.Load(XmlReader.Create(read));
List docList=新列表();
var root=xDoc.Element(“根”);
foreach(root.Elements(“DOC”)中的var元素)
{
字符串s=元素.Value;
文件列表。添加(s);
}
}

是的,您可以使用XmlSerializer执行此操作。检查此链接对我没有帮助,因为数组位于Cars中。XmlElement可以应用于字段和属性。你会犯错误的。对于根类,使用XmlRoot属性,但XmlRoot对我没有帮助,因为我的数组是空的;去拿阵列,好的。如果您尝试这样做:foreach(xDoc.element(“DOC”).Value中的var元素){docList.Add(xDoc.element(“DOC”).Value);}
docList.ToArray();
    using(StreamReader read = new StreamReader("FilePath.xml"))
    {
        XDocument xDoc = XDocument.Load(XmlReader.Create(read));
        List<string> docList = new List<string>();

        var root = xDoc.Element("ROOT");
        foreach (var element in root.Elements("DOC"))
        {
            string s = element.Value;
            docList.Add(s);
        }
    }