2010-01-13 68 views
1

我有一些相关的问题,但我会把问题分解成单独的帖子。LINQ to XML - 选择XML到强类型对象

我的XML是<Person>.....<Skills><Skill>Resus<Skill></Skills></Person>

我的代码是:

var products1 = from prd in xDoc.Descendants("Person") 

select new BusinessEntityLayer.Personnel 
{ 
    PayrollNo = (String)prd.Element("PayrollNumber"), 
    FirstName = (String)prd.Element("Name"), 
    LastName = (String)prd.Element("Surname"), 
    StreetAddress = (String)prd.Element("StreetAddress"), 
    Suburb = (String)prd.Element("Suburb"), 
    HomePhone = (String)prd.Element("HomePhone"), 
    MobilePhone = (String)prd.Element("MobilePhone"), 
    PagerNumber = (String)prd.Element("PagerNumber"), 
    Email = (String)prd.Element("Email"), 
    RecordType = (String)prd.Element("RecordType"), 
    Skills = (List<String>)prd.Element("Skills") 

我的人事类是强类型。除了技能集合之外,它完全可以工作。技能是List<Skill>,但我的代码不会编译时发生错误 - XLInq.ElementGeneric.List ...我也不能使用String[](重构我的业务类),因为我得到的结果相同。

人们在这里使用什么策略?

回答

1

我想你应该能够做这样的事情:

Skills = prd.Descendants("Skill").Select(e => new Skill(e.Value)).ToList(), 
+0

谢谢 - 已让我进一步下跌的轨道! – mttumbledown 2010-01-13 11:39:49

+0

现在我的整合问题是,在上游,我需要从数据集中提供我的XML(出于我的担心!),如何将一个通用集合添加到数据集列? dc = new DataColumn(“Skills”,System.Type.GetType?); dtData.Columns.Add(dc); 我能够从ds.GetXML()派生我的XML,所以我希望它得到正确的反序列化。如果我将它作为一个对象添加,我会遇到序列化问题。 – mttumbledown 2010-01-13 11:50:29