2010-11-20 10 views

Odpowiedz

28

Oto mniej niż dogłębnie opis, ale uważam, że dobry punkt wyjścia.

XmlRootAttribute - Służy do podawania informacji o schemacie dla klasy, która ma być podstawowym elementem serializowanego obiektu. To może być stosowane tylko do klas, struktur, wyliczeń, interfejsów zwracanych wartości.

XmlElementAttribute - Udostępnia informacje o schemacie dla właściwości klasy kontrolującej sposób serializacji jako elementy potomne. Ten atrybut może być stosowany tylko do pól (elementów zmiennych klasy), właściwości, parametrów i wartości zwracanych.

Pierwsze dwa XmlRootAttribute i XmlElementAttribute dotyczą XmlSerializer. Kolejny jest używany przez formatery środowiska wykonawczego i nie ma zastosowania podczas korzystania z XmlSerialization.

SerializableAtttrible - Służy do wskazania, że ​​typ może być serializowany przez formatery środowiska wykonawczego, takie jak SoapFormatter lub BinaryFormatter. Jest to wymagane tylko wtedy, gdy musisz serializować typ za pomocą jednego z formaterów i można go zastosować do delegatów, wyliczeń, struktur i klas.

Oto krótki przykład, który może pomóc w wyjaśnieniu powyższego.

// 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; 
} 

Biorąc powyższe pod uwagę, instancją AddressBook odcinkach z XmlSerializer dałoby XML w następującym formacie

<addressBook> 
    <owner firstName="Chris" lastName="Taylor"> 
    <tel1>555-321343</tel1> 
    <email>[email protected]</email> 
    </owner> 
    <contact firstName="Natasha" lastName="Taylor"> 
    <tel1>555-321343</tel1> 
    <email>[email protected]</email> 
    </contact> 
    <contact firstName="Gideon" lastName="Becking"> 
    <tel1>555-123423</tel1> 
    <email>[email protected]</email> 
    </contact> 
</addressBook> 
+0

można powiedzieć, jak możemy dodać Attribiutes na XML, który ma znacznik dla wszystkie kontakty, wewnątrz znacznika książki adresowej? – Dhanashree

+2

@Dhanashree, czy chcesz zawinąć elementy kontaktu w element rodzica kontaktów? Jeśli tak, to możesz usunąć [XmlElement ("kontakt")] z "Kontaktów kontaktowych", jeśli chcesz kontrolować nazwy, możesz zastąpić bieżący atrybut [XmlArray ("kontakty")], XmlArrayItem (" contact ")], który kontroluje nazwę root i elementy w kolekcji. –

+0

Dzięki! To pomogło :) – Dhanashree

Powiązane problemy