将Xml属性添加到字符串属性

时间:2010-11-11 12:59:48

标签: c# xml serialization

我有一个自定义对象,它有一个名为'Name'的字符串属性我想保持序列化生成的XML相同,但是为名为'NiceName'的元素添加一个属性,其值为'Full name'。

这就是我目前的情况:

<TheObject>
  <Name>mr nobody</Name>
</TheObject>

这就是我想要产生的:

<TheObject>
  <Name NiceName='Full name'>mr nobody</Name>
</TheObject>

我只需要一些XSLT,所以我不想在可能的情况下改变类的工作方式。 I.E.将名称从字符串更改为自定义类。所有对象都具有相同的属性,它永远不会改变它将完全只读。

2 个答案:

答案 0 :(得分:8)

您可以使用XMLAttribute和XmlText()

的组合

以下面的类声明示例:

    public class Description {
    private int attribute_id;
    private string element_text;

    [XmlAttribute("id")]
    public int Id {
        get { return attribute_id; }
        set { attribute_id = value; }
    }

    [XmlText()]
    public string Text {
        get { return element_text; }
        set { element_text = value; }
    }
}

输出

<XmlDocRoot>
<Description id="1">text</Description>

答案 1 :(得分:4)

如果您定义另一种类型,则可能如下所示:

public class Person
{

    private string _name;


    [XmlIgnore]
    public string Name
    {
        get
        {
            return _name;
        }
        set
        {
            _name = value;
            ThePersonName = new PersonName()
                                {
                                    Name = FullName,
                                    NiceName = _name
                                };
        }
    }

    [XmlElement(ElementName = "Name")]
    public PersonName ThePersonName { get; set; }

    public string FullName { get; set; }

}

public class PersonName
{
    [XmlAttribute]
    public string NiceName { get; set; }

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

使用

        XmlSerializer s = new XmlSerializer(typeof(Person));
        Person ali = new Person();
        ali.FullName = "Ali Kheyrollahi";
        ali.Name = "Nobody";
        s.Serialize(new FileStream("ali.xml",FileMode.Create), ali);

将生成

<?xml version="1.0"?>
<Person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Name NiceName="Nobody">Ali Kheyrollahi</Name>
  <FullName>Ali Kheyrollahi</FullName>
</Person>