2011-10-29 13 views
2

複雑なXMLからクラスを生成してSilverlightで非直列化する最良の方法は何ですか? .NETでは、Visual Studioのxsd.exeを使用できます。SilverlightでXMLからツールを使用してクラスを生成する方法

uがこの

using System.Xml.Serialization; 

/// <remarks/> 
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.1")] 
// this is unknown in SILVERLIGHT [System.SerializableAttribute()] 
[System.Diagnostics.DebuggerStepThroughAttribute()] 
//this is unknown in SILVERLIGHT [System.ComponentModel.DesignerCategoryAttribute("code")] 
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)] 
[System.Xml.Serialization.XmlRootAttribute(Namespace="", IsNullable=false)] 

public partial class Attest { 

private AttestBet[] betField; 

/// <remarks/> 
[System.Xml.Serialization.XmlElementAttribute("Bet")] 
public AttestBet[] Bet { 
    get { 
     return this.betField; 
    } 
    set { 
     this.betField = value; 
    } 
} 
} 

ような何かを得るが、私は、Silverlightアプリケーションにペーストをコピーするとき、私はそれをコメントするとき

// this is unknown in SILVERLIGHT [System.SerializableAttribute()] 
//this is unknown in SILVERLIGHT [System.ComponentModel.DesignerCategoryAttribute("code")] 

のエラーを取得し、それはちょっと働いていたものを2行せずにコードを使用します簡単な例で。 Silverlightで使用するクラスを生成するためのツールはありますか?

+0

誰もあなたのデータを取得します? – Gero

+0

Silverlightプロジェクトでxsdを使用しました。クイック検索を行い、生成されたコードを置き換えて、サポートされていないすべての属性を削除しました。スキーマを変更するたびにこの手動手順を実行するのは面倒ですが、機能します。 – Phil

答えて

0

誰も本当にそれをしないと、XMLファイルを簡単に解析できます。しかし、コントロールを直接XMLファイルにバインドしたい場合や、シリアライズ/デシリアライズしたい場合は、以下のコードを使用することができます。通常、このメソッドは、WCFが処理できない大量のデータ(呼び出しごとに50〜600MB)を処理する場合にのみ使用します。

XmlNodeItemという名前の新しいクラスを作成します。クラスは、次にXmlNodeItemののObservableCollectionから派生XmlNodeItemListという名前の別のクラスを、作成したXMLファイルから

public class XmlNodeItem 
{ 
    [XmlAttribute(AttributeName = "Bet")] 
    public string Bet 
    { 
     get; 
     set; 
    } 
    [XmlAttribute(AttributeName = "SomeOtherStuff")] 
    public string SomeOtherStuff 
    { 
     get; 
     set; 
    } 
} 

を別のノードを表します。

[XmlRoot(ElementName = "Items")] 
public class XmlNodeItemList : ObservableCollection<XmlNodeItem> 
{ 
    public void AddRange(IEnumerable<XmlNodeItem> range) 
    { 
     foreach (XmlNodeItem node in range) 
     { 
      this.Add(node); 
     } 
    } 
} 

そして、これを使用して

public DataClass: XmlNodeItemList 
{ 

var data = AddRange(RetrieveData(File.Open(value, FileMode.Open))); 


//Retrieve Data method 

public XmlNodeItemList RetrieveData(Stream xmlStream) 
    { 
     XmlSerializer serializer = new XmlSerializer(typeof(XmlNodeItemList)); 
     StreamReader reader = new StreamReader(xmlStream); 
     XmlNodeItemList list = (XmlNodeItemList)serializer.Deserialize(reader); 
     return list; 
    } 
} 
関連する問題