I have a custom object which has a string property called 'Name' I'd like to keep the XML generated by serialization the same but add an attribute to the element called 'NiceName' with a value of 'Full name'.
This is what i have currently:
<TheObject>
  <Name>mr nobody</Name>
</TheObject>
This is what i would like to generate:
<TheObject>
  <Name NiceName='Full name'>mr nobody</Name>
</TheObject>
I only need this for some XSLT so i don't want to change the way the class works if possible. I.E. Changing name from string to a custom class. All objects will have the same attribute it will never change it is going to be totally read only.
You can use a combination of XMLAttribute and XmlText()
take below example of class declaration:
    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; }
    }
}
The output will be
<XmlDocRoot>
<Description id="1">text</Description>
                        It is possible if you define another type as below:
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; }
}
Using
        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);
Will generate
<?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>
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With