簡體   English   中英

如何使用LINQ to XML創建對象列表?

[英]How do I use LINQ to XML to create a list of objects?

我有一些入站XML,我試圖用LINQ讀取生成對象列表:

<SCResponse>
<link href="http://192.168.6.126:8001/affiliate/account/81/notifications?startRow=2&amp;limit=20" rel="next_page" title="Next"/>
<link href="http://192.168.6.126:8001/affiliate/account/81/notifications?startRow=1&amp;limit=20" rel="previous_page" title="Previous"/>
<RecordLimit>20</RecordLimit>
<Notifications>
    <Notification href="http://192.168.6.126:8001/affiliate/account/81/notifications/24">
        <NotificationDate>2013-03-15T16:41:37-05:00</NotificationDate>
        <NotificationDetails>Notification details 1</NotificationDetails>
        <Status>New</Status>
        <NotificationTitle>Test notification 1</NotificationTitle>
    </Notification>
</Notifications>
<RecordsReturned>1</RecordsReturned>
<StartingRecord>1</StartingRecord>
<TotalRecords>1</TotalRecords>

我創建了一個簡單的POCO對象來表示“通知”:

public class Notification
{
    public System.DateTime notificationDate;

    public string notificationDetails;

    public string status;

    public string notificationTitle;

    public string href;
}

我想讀取傳入的XML並創建一個對象列表。

List<Notification> notificationList; 

XElement x = XElement.Load(new StringReader(result));
if (x != null && x.Element("Notifications") != null)
{
    notificationList = x.Element("Notifications")
                .Elements("Notification")
                .Select(e => new Notification()
                .ToList();
}

我真的不清楚'e'部分以及如何初始化一個新的Notification對象。 你可以幫忙嗎?

e只是傳遞給lambda表達式的參數名稱, new Notification() 你可以像這樣使用它:

notificationList = x.Element("Notifications")
                    .Elements("Notification")
                    .Select(e => new Notification()
                                 {
                                     href = (string)e.Attribute("href")
                                     notificationDetails = (DateTime)e.Element("NotificationDate")
                                     notificationDate = (string)e.Element("NotificationDetails")
                                     status = (string)e.Element("Status")
                                     notificationTitle = (string)e.Element("NotificationTitle")
                                 }
                    .ToList();

或者如果您更喜歡查詢語法

notificationList =
    (from e in x.Element("Notifications").Elements("Notification")
     select new Notification()
            {
                href = (string)e.Attribute("href")
                notificationDetails = (DateTime)e.Element("NotificationDate")
                notificationDate = (string)e.Element("NotificationDetails")
                status = (string)e.Element("Status")
                notificationTitle = (string)e.Element("NotificationTitle")
            })
    .ToList();

使用對象初始化語法:

notificationList = x.Element("Notifications")
            .Elements("Notification")
            .Select(e => new Notification()
                            {
                                href = (string)e.Attribute("href"),
                                notificationDate = (DateTime)e.Element("NotificationDate"),
                                notificationDetails = (string)e.Element("NotificationDetails"),
                                status = (string)e.Element("Status"),
                                notificationTitle = (string)e.Element("NotificationTitle")
                            })
            .ToList();

請記住,您可以輕松地將XElementXAttribute等對象XAttributestringintdoubleDateTime等。 完整列表可在此處找到: XElement類型轉換

notificationList = x.Element("Notifications")
    .Elements("Notification")
    .Select(e => new Notification()
        {
            notificationDate = DateTime.Parse(e.Element("NotificationDate").Value),
            notificationDetails = e.Element("NotificationDetails").Value,
            status = e.Element("Status").Value,
            notificationTitle = e.Element("NotificationTitle").Value,
            href = e.Attribute("href").Value
        }
    .ToList();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM