如何通过IXmlSerializable更改序列化XML元素的标记名称

时间:2010-09-27 07:42:07

标签: c# xml-serialization

一些背景知识:

我们需要序列化一些实体类,因此我们在第一版中实现了如下的实体类:

[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 个答案:

答案 0 :(得分:2)

我想,XmlRootAttribute应该与IXmlSerializable一起使用。