Czy istnieje sposób, aby spowodować XmlSerializer
do serializacji prymitywne członków (np właściwości String) klasy jako atrybutów XML, nie jako elementów XML, bez konieczności pisania [XmlAttribute]
z przodu każdej deklaracji własności? tj. czy istnieje przełącznik globalny, który mówi, aby XmlSerializer
serializować wszystkie prymitywne elementy klasy jako atrybuty XML?Jak spowodować XmlSerializer do generowania atrybutów zamiast elementów domyślnie
Załóżmy, że mamy następujące klasy:
public class Person
{
public string FirstName
{
...
}
public string LastName
{
...
}
}
Następnie XmlSerializer
generuje ten kod domyślnie:
<Person>
<FirstName>John</FirstName>
<LastName>Doe</LastName>
</Person>
Co chcę jednak jest to kod:
<Person FirstName="John" LastName="Doe"/>
Jeszcze raz: chcę to zrobić bez [XmlAttribute]
(lub bez XmlAttributeOverrides
, co byłoby jeszcze bardziej pracą).
Jednym z możliwych rozwiązań byłoby użycie ogólnego etapu przetwarzania, który stosuje transformację XSLT do konwersji elementów na atrybuty. Zastanawiam się jednak, czy istnieje prostsze rozwiązanie.
Odpowiedź Enrico wydaje się być rozwiązaniem tego problemu, ale z pewnością jest bardziej skomplikowana i mniej pożądana niż te, których unikasz. Być może możesz nam powiedzieć, dlaczego nie możesz użyć tych metod, abyśmy wiedzieli, co konkretnie unikasz? –
Potrzebuję wymiany danych z zewnętrznym sytsem, który wymaga określonego formatu XML. W tym formacie proste typy danych są przedstawiane jako atrybuty, złożone typy danych (np. Listy) są reprezentowane jako atrybuty.Model danych ma około 50 klas i 500 atrybutów. Chcę uniknąć tego, że muszę napisać [XmlAttribute] przed każdym atrybutem. –
@Kyle W W tym przypadku posiadanie wspólnej logiki serializacji XML w jednym miejscu (jak klasa bazowa) na pewno by miało sens, ponieważ utrzymuje rzeczy [DRY] (http://en.wikipedia.org/wiki/Don't_repeat_yourself). –