2011-06-22 222 views
1

如果我有以下xml;Linq2XML創建對象模型

<productList> 
    <product> 
    <id>1</id> 
    <name>prod 1</name> 
    </product> 
    <product> 
    <id>2</id> 
    <name>prod 2</name> 
    </product> 
    <product> 
    <id>3</id> 
    <name>prod 3</name> 
    </product> 
</productList> 

如何使用Linq2XML創建對象heiarchy?

我試過這個;

var products = from xProducts in xDocument.Descendants("root").Elements("productList") 
    select new 
    { 
    product = from xProduct in xProducts.Elements("product") 
    select new 
    { 
     id = xProduct.Element("id").Value, 
     name = xProduct.Element("name").Value 
    } 
    } 

但是這會產生一個錯誤,因爲我認爲product正在多次聲明。

我想結束一個這樣的對象;

ProductList 
    List<product> 
    id 
    name 

我不能有一個模型,這些將進入,所以我需要使用var。

編輯

如果我只得到說這個名字還是那麼的ID代碼工作。它只會失敗,如果我試圖獲得這兩個領域。

+0

什麼是錯誤? –

+0

類型'<> f__AnonymousType0 '同時存在於'MyApplication.dll'和'System.Web.dll' – griegs

回答

3

關於你的錯誤,你使用Silverlight嗎?這不支持匿名類型。無論如何,Linq-to-XML在流利的語法而不是查詢語法方面效果更好。定義合適的產品列表和產品類別,以下應該工作:

class ProductList : List<Product> 
{ 
    public ProductList(items IEnumerable<Product>) 
     : base (items) 
    { 
    } 
} 

class Product 
{ 
    public string ID { get; set;} 
    public string Name{ get; set;} 
} 

var products = xDocument.Desendants("product"); 
var productList = new ProductList(products.Select(s => new Product() 
    { 
     ID = s.Element("id").Value, 
     Name= s.Element("name").Value 
    }); 
+0

是的,雖然解決了這個問題,但我真的很高興不想真正擁有這個模型。 – griegs

相關問題