Как изменить имя тега сериализованного элемента XML с помощью IXmlSerializable - PullRequest
0 голосов
/ 27 сентября 2010

Немного предыстории:

У нас есть некоторые классы сущностей, которые необходимо сериализовать, поэтому мы реализуем класс сущностей следующим образом в первом издании:

[XmlType("FooElement")]
public class Foo
{
    [XmlText]
    public string Text { get; set; }
}

Сериализованная строка XML должна быть:

<?xml version="1.0" encoding="gb2312"?>
<FooElement xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" mlns:xsd="http://www.w3.org/2001/XMLSchema">foo</FooElement>

Но нам нужно сделать свойство Text доступным только для чтения, поэтому мы изменим класс Foo для реализации интерфейса IXmlSerializable следующим образом:

[Serializable]
public class Foo : IXmlSerializable
{
    public Foo()
    { }

    public Foo(string text)
    {
        Text = text;
    }

    public string Text { get; private set; }

    public XmlSchema GetSchema()
    {
        return null;
    }

    public void ReadXml(XmlReader reader)
    {
        Text = reader.Value;
    }

    public void WriteXml(XmlWriter writer)
    {
        writer.WriteValue(Text);
    }
}

Затем сериализованная строка XMLтакже был изменен следующим образом:

<?xml version="1.0" encoding="gb2312"?><Foo>foo</Foo>

Есть ли способ изменить имя тега с "<Foo>foo</Foo>" на "<FooElement>foo</FooElement>"?

1 Ответ

2 голосов
/ 27 сентября 2010

Полагаю, XmlRootAttribute должен хорошо работать с IXmlSerializable.

...