.net 无法将xml解析为List〈>C#

ff29svar  于 2022-11-19  发布在  .NET
关注(0)|答案(2)|浏览(159)

我有这个xml:

<NewDataSet xmlns="http://anonymous_link_here">
    <Table>
        <Name>Example</Name>
    </Table>
    <Table>
        <Name>Example</Name>
    </Table>
    <Table>
        <Name>Example</Name>
    </Table>
    <Table>
        <Name>Example</Name>
    </Table>
</NewDataSet>

我尝试将此xml解析为List<myClass>

public static List<myClass> ConvertToList(string xml)
        {
            var objects= XDocument.Parse(xml);
            var objectsList= (from o in objects.Root.Elements()
                               select new myClass()
                               {
                                   Name = (string)o.Element("Name"),
                               }).ToList();
            return objectsList;
        }

myClass类别:

[Serializable]
[XmlRoot("Table"), Namespace="http://anonymous_link_here"]

public class myClass{

    [XmlElement(ElementName="Name"), Namespace="http://anonymous_link_here"]
    public string Name { get; set; }

}

我不知道为什么objectsList中的元素计数是正确的,但是Name属性为空。我认为以下内容有问题:Name = (string)o.Element("Name") .任何帮助都将不胜感激。

hfwmuf9z

hfwmuf9z1#

问题在于,您对o.Element("Name")的调用查找名为Name * 但没有命名空间 * 的元素,而您的元素位于文档的默认命名空间"http://anonymous_link_here"中。
幸运的是,LINQ to XML使得使用XNamespace可以很容易地解决这个问题:

XNamespace ns = "http://anonymous_link_here";
XElement child = parent.Element(ns + "Name");

经过一些重写(和重命名以避免myClass),您的方法将如下所示:

public static List<Table> ConvertToList(string xml)
{
    var document = XDocument.Parse(xml);
    XNamespace ns = "http://anonymous_link_here";
    return document.Root
        .Elements()
        .Select(element => new Table { Name = (string) element.Element(ns + "Name") })
        .ToList();
}

或者在表达式体方法中:

private static readonly XNamespace TableNamespace = "http://anonymous_link_here";

public static List<Table> ConvertToList(string xml) =>
    XDocument.Parse(xml)
        .Root
        .Elements()
        .Select(element => new Table 
        { 
            Name = (string) element.Element(TableNamespace + "Name") 
        })
        .ToList();
gtlvzcf8

gtlvzcf82#

您也可以尝试下面的代码;通知名称= o.非.元素,

public static List<myClass> ConvertToList(string xml)
{
     var objects = XDocument.Parse(xml);
     var objectsList = (from o in objects.Root.Elements()
                           select new myClass()
                           {
                               Name = o.Value,
                           }).ToList();
      return objectsList;
 }

相关问题