Add Xml Attribute to string property

前端 未结 2 878
春和景丽
春和景丽 2020-12-06 19:00

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 \

相关标签:
2条回答
  • 2020-12-06 19:16

    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>
    

    0 讨论(0)
  • 2020-12-06 19:24

    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>
    
    0 讨论(0)
提交回复
热议问题