【问题标题】:Invalid initializer member declarator C# LINQ无效的初始化程序成员声明器 C# LINQ
【发布时间】:2015-09-17 17:19:18
【问题描述】:

我有 XML,需要解析它并通过 LINQ 创建对象

<?xml version="1.0"  encoding="UTF-8"?> 
 <Books>         
   <Book> 
    <ID> number </ID>
    <DateCreated> date </DateCreated>  
    <Pages>  
     <Page>      
        <PageID> string </PageID>  
        <PageNumber> number </PageNumber> 
     </Page>     

    <!-- ... more Page nodes here if present ...     --> 
    </Pages>     
  </Book> 
   <!-- ... more Book nodes here ...     --> 
</Books>

类:

public class BooksResponse
    {
        public Book[] Book_Items { get; set; }
    }

    public class Book
    {
        public int ID { get; set; }
        public string DateCreated { get; set; }
        public Page[] Pages { get; set; }
    }

    public class Page
    {
        public string PageID { get; set; }
        public int PageNumber { get; set; }
    }

和我的代码:

var booksResponse = xDocument
                            .Elements("Books")
                            .Select(x => new BooksResponse
                            {
                                Book_Items = x.Elements("Book")
                                .Select(c => new Book
                                {
                                    DateCreated = (string)c.Element("DateCreated"),
                                    ID = (int)c.Element("ID"),
                                    Pages => c.Elements("Pages")
                                    .Select(y => new Page
                                    {
                                        PageID = (string)y.Element("PageID"),
                                        PageNumber = (int)y.Element("PageNumber"),

                                    }).ToArray()

                                }).ToArray()

                            }).FirstOrDefault();

和附近的代码Pages => c.Elements("Pages")

错误:

初始化器成员声明器无效。

我做错了什么,如何解决?

非常感谢!

【问题讨论】:

  • 也许你的意思是Pages = c.Elements("Pages")...(注意=而不是=>)?

标签: c# asp.net xml linq xml-parsing


【解决方案1】:

根据您的 XML,正确的语法是

Pages = c.Descendants("Page")
.Select(y => new Page
{
    PageID = (string)y.Element("PageID"),
    PageNumber = (int)y.Element("PageNumber"),

}).ToArray()

如前所述,首先将=&gt; 修复为=。现在,元素Pages 没有元素PageIDPageNumber。它们位于节点Page 下。要获取Page 节点的列表,您可以使用Descendants("Page"),因为它们不是Book 的直接子元素。

【讨论】:

    【解决方案2】:

    您可以使用XmlSerializer

    var xs = new XmlSerializer(typeof(BooksResponse));
    BooksResponse books = (BooksResponse)xs.Deserialize(responseStream);
    

    为你的类添加属性BooksResponse

    [XmlRoot("Books")]
    public class BooksResponse
    {
        [XmlElement("Book")]
        public Book[] Book_Items { get; set; }
    }
    

    它适用于给定的 xml。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-28
      • 2018-09-04
      • 1970-01-01
      • 1970-01-01
      • 2021-07-19
      相关资源
      最近更新 更多