2011-12-14 113 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。但是这可能会创造出比您真正想要做的更多的工作。