2012-01-20 10 views
0

IListをシリアル化しようとしています。だから私はこれにIXmlSerializableを使用しています。IListとカスタムXMLネストされたオブジェクトのシリアル化

class SerializeTarget : IXmlSerializable 
{ 

    public IList<Target> Targets { get; set; } 

    public string Name; 

    #region IXmlSerializable Members 

    public System.Xml.Schema.XmlSchema GetSchema() 
    { 
     throw new NotImplementedException(); 
    } 

    public void ReadXml(System.Xml.XmlReader reader) 
    { 
     throw new NotImplementedException(); 
    } 

    /// <summary> 
    /// </summary> 
    /// <param name="writer"> 
    /// The writer. 
    /// </param> 
    public void WriteXml(System.Xml.XmlWriter writer) 
    { 
     writer.WriteStartElement("SerializeTarget"); 
     writer.WriteElementString("Name", Name); 
     writer.WriteStartElement("Targets"); 
     foreach (var target in Targets) 
     { 
      ///?????? 
     } 
     writer.WriteEndElement(); 
     writer.WriteEndElement(); 
    } 

    #endregion 
} 

class Target : IXmlSerializable 
{ 
    public String Name { get; set; } 

    #region IXmlSerializable Members 

    public System.Xml.Schema.XmlSchema GetSchema() 
    { 
     throw new NotImplementedException(); 
    } 

    public void ReadXml(System.Xml.XmlReader reader) 
    { 
     throw new NotImplementedException(); 
    } 

    public void WriteXml(System.Xml.XmlWriter writer) 
    { 
     writer.WriteString(Name); 
    } 

    #endregion 
} 

どのように私はSerializeTarget.Serializeからネストされたオブジェクトのシリアル化を呼び出すことができますが、次のようにクラスはありますか?

+1

は 'IListの' 'ないTarget'いますが、' XmlSerializer'クラスを使用していないのはなぜ 'Targets' –

+1

命名考えてみましょうか? – Groo

答えて

1

あなたは@Henk Holtermanのアドバイスに従うならば、あなたはまたにターゲット上のWriteXMLを変更したいです

writer.WriteAttributeString("Name",Name); 

もあなたも)(でWriteXmlのではなく、

XmlSerializer xmlSerializer = new XmlSerializer(target.GetType()); 
xmlSerializer.Serialize(writer, target); 

いずれにせよSHを使用することができますあなたを与えるウルド:

<?xml version="1.0" encoding="utf-16" ?> 
<SerializeTarget> 
    <Name /> 
<Targets> 
<Target> 
    <Target Name="foo" /> 
    </Target> 
<Target> 
    <Target Name="foo2" /> 
    </Target> 
<Target> 
    <Target Name="foo3" /> 
</Target> 
</Targets> 
</SerializeTarget> 
1

非常に簡単に思える:

foreach (var target in Target) 
{ 
    ///?????? 
    target.WriteXml(writer); 
} 

はそれで問題がありますか?

編集:しかし、あなたはおそらくあまりにも要素を、開始と終了が必要になります、彼らはターゲットメソッドの内部で行くべき:

public void WriteXml(System.Xml.XmlWriter writer) 
{ 
    writer.WriteStartElement("Target"); 
    writer.WriteString(Name); 
    writer.WriteEndElement(); 
} 
関連する問題