2011-06-22 7 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> 

私はどのようにオブジェクトheiarchyを作成するのにLinq2XMLを使用しますか?

私はこれを試しました。

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は、クエリの構文ではなく流暢な構文でうまく機能します。適切なProductListクラスとProductクラスを定義すると、次のように動作します。

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

関連する問題