настраиваемая сериализация xml с атрибутами - PullRequest
2 голосов
/ 14 декабря 2011

Есть ли способ заставить сериализатор 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 ]

1 голос
/ 14 декабря 2011

Как сказал Бух Бух, единственный способ сделать это - реализовать 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 голосов
/ 14 декабря 2011

Если вы заставите Mail реализовать IXmlSerializable, то вы можете иметь любой xml-файл, который вам нравится. Но это может создать больше работы, чем вы действительно хотите.

...