如何使用XmlElement批注设置序列化类的XML值

时间:2011-11-02 21:32:57

标签: c# xml serialization

我有一个以下列方式编写的课程:

[XmlRoot]
public class MyXMLElement
{
    [XmlAttribute]
    public string AnAttribute { get; set; }

    [XmlAttribute]
    public string AnotherElementAttribute { get; set; }
}

当这是序列化时,我想设置它的值,所以我得到如下内容:

<MyXMLElement AnAttribute="something" AnotherElementAttribute="something else">The inner value of the element</MyXMLElement>

有人有想法吗?

3 个答案:

答案 0 :(得分:1)

如果要设置元素的值,可以使用[XmlText]属性:

[XmlRoot]
public class MyXMLElement
{
    [XmlAttribute]
    public string AnAttribute { get; set; }

    [XmlAttribute]
    public string AnotherElementAttribute { get; set; }

    [XmlText]
    public string Value { get; set; }
}

答案 1 :(得分:0)

添加另一个属性来保存内部文本并使用XmlTextAttribute

标记它
[XmlRoot]
public class MyXMLElement
{
    [XmlAttribute]
    public string AnAttribute { get; set; }

    [XmlAttribute]
    public string AnotherElementAttribute { get; set; }

    [XmlText]
    public string InnerText { get; set; }
}

答案 2 :(得分:0)

如果您编写自己的序列化程序,可以非常轻松地完成此操作(下面的示例)。 这也可以让您完全控制对象的持久性,而不是依赖于.NET决定如何执行它。

interface IXmlConvertable{
    XElement ToXml();

}

public class MyClass : IXmlConvertable{

    public string Name { get; set; }

    public string ID { get; set; }

    public XElement ToXml(){

        var retval = new XElement("MyClass"
            , new XAttribute("Name", new XCData(Name))
            , new XAttribute("ID", new XCData(ID))
            );

        return retval;
    }
}