Здесь приведено менее подробное описание, но я думаю, что это хорошая отправная точка.
XmlRootAttribute
- используется для предоставления информации о схеме для класса, который будет корневым элементом сериализованного графа объектов. Это можно применять только к классам, структурам, перечислениям, интерфейсам возвращаемых значений.
XmlElementAttribute
- Предоставляет информацию о схеме для свойств класса, управляющих тем, как они сериализуются как дочерние элементы. Этот атрибут может применяться только к полям (членам переменных класса), свойствам, параметрам и возвращаемым значениям.
Первые два XmlRootAttribute
и XmlElementAttribute
относятся к XmlSerializer.
В то время как следующий, используется форматерами времени выполнения и не применяется при использовании XmlSerialization.
SerializableAtttrible
- используется для указания того, что тип может быть сериализован средствами форматирования среды выполнения, такими как SoapFormatter или BinaryFormatter. Это требуется только в том случае, если вам нужно сериализовать тип с использованием одного из средств форматирования, и его можно применять к делегатам, перечислениям, структурам и классам.
Вот краткий пример, который может помочь прояснить вышесказанное.
// This is the root of the address book data graph
// but we want root written out using camel casing
// so we use XmlRoot to instruct the XmlSerializer
// to use the name 'addressBook' when reading/writing
// the XML data
[XmlRoot("addressBook")]
public class AddressBook
{
// In this case a contact will represent the owner
// of the address book. So we deciced to instruct
// the serializer to write the contact details out
// as <owner>
[XmlElement("owner")]
public Contact Owner;
// Here we apply XmlElement to an array which will
// instruct the XmlSerializer to read/write the array
// items as direct child elements of the addressBook
// element. Each element will be in the form of
// <contact ... />
[XmlElement("contact")]
public Contact[] Contacts;
}
public class Contact
{
// Here we instruct the serializer to treat FirstName
// as an xml element attribute rather than an element.
// We also provide an alternate name for the attribute.
[XmlAttribute("firstName")]
public string FirstName;
[XmlAttribute("lastName")]
public string LastName;
[XmlElement("tel1")]
public string PhoneNumber;
[XmlElement("email")]
public string EmailAddress;
}
Учитывая вышеизложенное, экземпляр AddressBook, сериализованный с XmlSerializer, даст XML следующего формата
<addressBook>
<owner firstName="Chris" lastName="Taylor">
<tel1>555-321343</tel1>
<email>chris@guesswhere.com</email>
</owner>
<contact firstName="Natasha" lastName="Taylor">
<tel1>555-321343</tel1>
<email>natasha@guesswhere.com</email>
</contact>
<contact firstName="Gideon" lastName="Becking">
<tel1>555-123423</tel1>
<email>gideon@guesswhere.com</email>
</contact>
</addressBook>