2010-09-27 52 views
0

改变序列化的XML元素的标签名称一些背景资料:如何通过IXmlSerializable的

我们有一些实体类需要被序列化,所以我们实现实体类如第一版如下:

[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类实现IXmlSeri alizable界面如下:

[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>”标签的名字吗?

回答

2

我猜想,XmlRootAttribute应该和IXmlSerializable一起玩。

+0

谢谢,XmlRootAttribute按预期工作。 – 2010-09-27 08:13:43