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
{
      //....