自定义xml序列化与属性

时间:2011-12-14 11:35:05

标签: c# .net xml xml-serialization xsd

有没有办法让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架构的同时易于使用。

2 个答案:

答案 0 :(得分: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();
    }
}

答案 1 :(得分:0)

如果您Mail实施IXmlSerializable,那么您可以拥有自己喜欢的任何xml。但这可能只是创造了比你真正想做的更多的工作。