2011-12-14 114 views
2

有沒有什麼辦法讓XML序列化轉換的以下內容:自定義XML序列化與屬性

class Mail 
{ 
    public string Subject = "sub1"; 
} 

成以下XML架構:

<Mail> 
    <MailSubject> 
     <Subject>sub1</Subject> 
    </MailSubject> 
</Mail> 

這就是我想換行XMLELEMENT在不使用以下子類的新xmlElement組中:

class Mail 
{ 
    public MailSubject MailSubject = new MailSubject(); 
} 

class MailSubject 
{ 
    public string Subject = "sub1"; 
} 

我的xml格式來自一個第三方,我正在努力做到這一點,以便我們的對象有意義並且易於使用,同時仍然保持其XML模式。

+0

不,基本上! (據我所知) – 2011-12-14 11:37:14

回答

1

正如Buh Buh所說,通過實施IXmlSerializable來做到這一點的唯一方法。一個可能的實現將如下所示:

public class Mail : IXmlSerializable 
{ 
    public string Subject; 

    public System.Xml.Schema.XmlSchema GetSchema() 
    { 
     return null; 
    } 

    public void ReadXml(System.Xml.XmlReader reader) 
    { 
     bool isEmpty = reader.IsEmptyElement; 

     reader.ReadStartElement(); 
     if (isEmpty) return; 

     isEmpty = reader.IsEmptyElement; 
     reader.ReadStartElement(); 
     if (isEmpty) 
     { 
      reader.ReadEndElement(); 
      return; 
     } 

     Subject = reader.ReadString(); 

     reader.ReadEndElement(); 
     reader.ReadEndElement(); 
    } 

    public void WriteXml(System.Xml.XmlWriter writer) 
    { 
     writer.WriteStartElement("MailSubject"); 
     writer.WriteElementString("Subject", Subject); 
     writer.WriteEndElement(); 
    } 
} 
0

如果您Mail實現IXmlSerializable,那麼你可以有你喜歡的任何XML。但是這可能會創造出比您真正想要做的更多的工作。