Я думаю, вам нужен специальный класс для хранения вашего свойства 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")