Установка имени элемента XML и атрибута XML для свойства класса - PullRequest
0 голосов
/ 27 мая 2020

У меня есть этот класс, который я хочу преобразовать в элемент XML

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

Это отобразит XML

<Person>
  <PersonName>Smith</PersonName>
</Person>

Я хочу добавить атрибут в элемент PersonName

<Person>
  <PersonName required="true">Smith</PersonName>
</Person>

Как мне это сделать?

1 Ответ

2 голосов
/ 27 мая 2020

Я думаю, вам нужен специальный класс для хранения вашего свойства Name, а не string. Вот пример использования атрибутов XmlText и XmlAttribute для управления работой встроенного XmlSerializer:

using System.Xml.Serialization;
using System.IO;

namespace SomeNamespace
{
    class Program
    {
        static void Main(string[] args)
        {
            Person me = new Person("me");

            string path = "C:\\temp\\person.xml";
            XmlSerializer serializer = new XmlSerializer(typeof(Person));
            using (StreamWriter sw = new StreamWriter(path))
            {
                serializer.Serialize(sw, me);
            }
        }
    }

    public class Person
    {
        public Person() { } // needed for serialization
        public Person(string name)
        {
            Name = new PersonName(name);
        }

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

    public class PersonName
    {
        public PersonName() { } // needed for serialization
        public PersonName(string name)
        {
            Name = name;
        }

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

        [XmlAttribute] // serializes as an Attribute
        public bool Required { get; set; } = true;
    }
}

output (at C: \ temp \ person.xml; вы можете изменить Main на сериализацию в строку и печать на консоль, если хотите):

<?xml version="1.0" encoding="utf-8"?>
<Person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <PersonName Required="true">me</PersonName>
</Person>

Если вы действительно хотите, чтобы ваш атрибут Required был сериализован как строчный «required», вы можете использовать различные свойства XmlAttribute, например: XmlAttribute(AttributeName = "required")

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...