2016-05-03 3 views
0

を同じオブジェクト型をシリアル化 -私はこのようなXML構造を探しています複数のレベルで

namespace Application1 
{ 
    public class Directory 
    { 
     [XmlAttribute] 
     public string Id { get; set; } 
     [XmlAttribute] 
     public string Name { get; set; } 
     [XmlElement("Directory ")] 
     public Dir[] Directory { get; set; } 
    } 
} 

しかし、これは、フォームIでXMLを生成しません -

<Directory id="ID1" Name="N1"> 
    <Directory id="ID2" Name="N2"> 
     <Directory id="ID3" Name="N3"> 
     <Directory id="ID4" Name="N4"/> 
     </Directory> 
    </Directory> 
</Directory> 

私はクラスを書きました欲しかった

+0

ディレクトリの後のスペースを '[XmlElement(" Directory ")]'で削除すると、正しいxmlが生成されます。 –

+0

生成されたxmlのxml名前空間を削除する必要がある場合は、この質問を参照してください:http://stackoverflow.com/q/2950658/1095390 –

答えて

1

一般的なXMLシリアライザが付属しています.netフレームワークはXmlSerializerです。 あなたがする必要があるのは、ルートオブジェクトをシリアル化し、シリアル化されたコンテンツをfuthurの使用のためにXDocumentに書き込むことだけです。あなたのクラス宣言のための

追加[Serializableを]属性:その後、

[Serializable] public class Directory { [XmlAttribute] public string Id { get; set; } [XmlAttribute] public string Name { get; set; } [XmlElement("Directory")] public Directory[] Directories { get; set; } }

と、次のコードを使用します。

XmlSerializer serializer = new XmlSerializer(typeof(Directory)); 
XDocument doc = new XDocument(); 
using (var writer = doc.CreateWriter()) 
{ 
     serializer.Serialize(writer, rootDir); 
} 

注:任意の基準サイクルは、あなたのツリーの任意のレベルで発生した場合、シリアル化がクラッシュします。

関連する問題