Sigh... in questo periodo lavoro molto (troppo :P) con XML....
In particolare, come descritto dal mio precedente post mi sono trovato a dover serializzare degli oggetti custom in XML per generare un documento conforme a certi standard XSD. Ora, non ci sarebbe nulla di particolarmente complicato, se non fosse che giustamente chi ha definito l'XSD _non_ conosce evidentemente le naming convention e gestisce gli elementi un pò in inglese, un pò in italiano, un pò minuscolo, un pò maiuscolo, mezzo pascal case, mezzo camel case... insomma, a seconda di dove lo porta il quore (l'errore grammaticale è assolutamente voluto :P)
Quindi, visto che non volevo infarcire il mio domain model con classi dai nomi eterogenei, e visto che di default l'XmlSerializer utilizza il nome della classe ed il nome dei metodi per trasporli nei corrispettivi nodi/elementi XML, ho deciso di tenermi la mia classe scritta così com'era, e di decorare tutti gli elementi che mi servivano con l'attributo
[XmlElement("nomeElemento")]
In modo da "istruire" il Serializer su come "tradurre" una certa classe o un certo elemento!
Per le classi, invece, utilizzo l'attributo
[XmlRoot("nomeRoot")]
Attenzione che in caso di classi annidiate l'attributo è da specificare sempre nel padre. Esempio, se io ho una classe persona, e voglio che persona restituisca un nodo che si chiama "NodoPersona", decorerò direttamente la classe con
[XmlRoot("NodoPersona")]
public class Persona
{
//....
Ma se questa classe persona ha una sottoclasse, decorerò comunque l'oggetto all'interno della classe Persona con l'attributo XmlElement, _non_ la mia classe con l'attributo XmlRoot. Quindi verrebbe:
[XmlRoot("NodoPersona")]
public class Persona
{
//.... [XmlElement("SottoNodoInteressi")]
public Interessi InteressiPersona;
//....
}
public class Interessi
{
//....