jaka jest różnica między używaniem XMLRoot/XMLElement i używaniem atrybutów Serializable()? Skąd mam wiedzieć, kiedy użyć każdego?Różnica między używaniem XMLRoot/XMLElement i używaniem Serializable() atrybuty (w C#)
Odpowiedz
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>
- 1. Różnica między używaniem Trace i TraceSource
- 2. Różnica między "używaniem" a określaniem zakresu?
- 3. Różnica między używaniem UINavigationController a UINavigationBar
- 4. Różnica między używaniem Makefile i cmake do kompilacji kodu
- 5. Jaka jest różnica między używaniem Docker Machine a Swarm i używaniem Swarm przez demona Docker?
- 6. Różnica między używaniem train_test_split i cross_val_score w sklearn.cross_validation
- 7. jaka jest różnica między używaniem ATOMIC_FLAG_INIT i std :: atomic_flag :: wyraźny
- 8. Jaka jest różnica między używaniem MD5.Create i MD5CryptoServiceProvider?
- 9. Różnica między używaniem metody getConnection() a używaniem puli bezpośrednio w pliku node.js z modułem node-mysql?
- 10. Różnica między używaniem nazwy pliku; i użyj nazwy Modulename();
- 11. Różnica między używaniem "chmod a + x" i "chmod 755"
- 12. między używaniem wartości ujemne i niepodpisanych ints
- 13. Różnica w typie między używaniem a niewykorzystywaniem Ustaw słowo kluczowe
- 14. Jaka jest różnica między używaniem puli wątków a normalnym wątkiem?
- 15. Jaka jest różnica między używaniem IEqualityComparer a korektą Equals/GethashCode?
- 16. Szablon Metaprogramming - Różnica między używaniem Enuma Hack a statycznym Const
- 17. Jaka jest różnica między używaniem obiektu instantiateViewControllerWithIdentifier a wykonywaniem identyfikatora?
- 18. Jaka jest różnica między używaniem aplikacji/csv a tekstem/csv?
- 19. Decyzja między używaniem strumienia lub pętli
- 20. Jakie są różnice między typedef a używaniem?
- 21. Różnica między c() i append()
- 22. Różnica między _ i self. w Objective-C
- 23. Jaka jest różnica między używaniem "http: //" i "//" w src lub href?
- 24. Jaka jest różnica między używaniem „Wiązanie z StaticResource” i używając „StaticResource bezpośrednio” w WPF
- 25. Jaka jest różnica między używaniem add(). AddToBackStack(), add(). Detach() i replace(). AddToBackStack() w FragmentTransaction?
- 26. Jak zdecydujesz między używaniem abstrakcyjnej klasy a interfejsem?
- 27. rich: problem z używaniem efektu
- 28. Różnica między wysyłaniem do kolejki z `sync` i używaniem elementu pracy z flagą` .wait`?
- 29. Implikacje związane z używaniem GADT
- 30. Różnica między używaniem "def" do aktualizacji var i "alter-var-root"
można powiedzieć, jak możemy dodać Attribiutes na XML, który ma znacznik dla wszystkie kontakty, wewnątrz znacznika książki adresowej? –
Dhanashree
@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. –
Dzięki! To pomogło :) – Dhanashree