2009-03-01 6 views
1

私はこの作業を取得することができないよう、ここに私の(ストリップダウン)コードである: -C#でXMLをデシリアライズするときに、親オブジェクトへの参照を取得するにはどうすればよいですか?

[XmlRoot("report")] 
public class Report 
{ 
    [XmlArray("sections"), XmlArrayItem("section")] 
    public List<Section> Sections; 
} 

public class Section 
{ 
    public Report Report; 
} 

が、私は何かが足りないのですか?

答えて

6

オブジェクトには、クラスではサポートされていない循環参照が含まれています。あなたはその代わりにDataContractSerializerを見ることができます。supportsそのようなシナリオ。

+0

これは、古い機構の魅力的な理由がない場合のシリアライゼーションにも好まれるデフォルトのメカニズムです。 – ShuggyCoUk

+0

DataContractSerializerリンクがMSDNのXmlSerializerにリンクしています... – configurator

+0

私は300文字以上の文字を使用していましたが、DataContractSerializerを使用していれば十分です。ありがとうございました。 –

0

これらのクラスのシリアライズとデシリアライズの方法を理解しておく必要があります。結果として必要なXMLを記述し、オブジェクトをXMLにする方法とその逆を理解します。それは思いがけないことではありません。

0

私の解決策です。

public class Report 
{ 
    //... 


    void PostLoad() 
    { 
    foreach(Section s in Sections) 
    { 
     s.Report = this; 
    } 
    } 

    public static Report Load(string filename) 
    { 
    // Load using an XmlSerializer 
    Report report = ...; 

    report.PostLoad(); 

    return report; 
    } 
} 
関連する問題