2.197 messaggi dal 30 novembre 2001
Ho una classe con un attributo che può essere nullable:
[Serializable()]
[XmlRoot(ElementName="importo", Namespace="http://www.miosito.it/miotag")]
public class ImportoData
{
        private decimal?     _importoMinimo;
        private decimal?     _importoMassimo;

        [XmlAttribute("minimo")]
        public decimal? ImportoMinimo
        {
            get { return _importoMinimo; }
            set { _importoMinimo = value; }
        }
}

il problema è che quando vado a deserializzare la classe ho un errore sul campo nullable:
Impossibile serializzare il membro "ImportoMinimo" di tipo System.Nullable`1[System.Decimal]. XmlAttribute/XmlText non può essere utilizzato per codificare tipi complessi.

Devo aggiungere qualche altro attributo al campo per farlo serializzare come nullable, oppure non è possibile?
dato un occhiata quà:

http://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlelementattribute.isnullable.aspx

ciao marco

Chi parla senza modestia troverà difficile rendere buone le proprie parole.
Confucio

http://nostromo.spaces.live.com/default.aspx
2.197 messaggi dal 30 novembre 2001
Ho dato un'occhiata e ho fatto delle modifiche, allora la classe da serializzare è questa (ometto le parti che nn servono):
public class Dati
{
private ImportoData                 _importo;
..
[XmlElement(ElementName="importo", Type=typeof(ImportoData), Namespace="http://www.miosito.it/dati")]
        [XmlElement(ElementName="minimo", Type=typeof(decimal), IsNullable=true)]
        [XmlElement(ElementName="massimo", Type=typeof(decimal), IsNullable=true)]
public ImportoData Importo
{
   get { return _importo; }
   set { _importo = value; }
}
..
}

la classe ImportoData è questa:

[Serializable()]
[XmlRoot(ElementName="importo", Namespace="http://www.miosito.it/dati")]
public class ImportoData
{
        private decimal?     _importoMinimo;
        private decimal?     _importoMassimo;
        
        [XmlAttribute("minimo")]
        public decimal? ImportoMinimo
        {
            get { return _importoMinimo; }
            set { _importoMinimo = value; }
        }

        [XmlAttribute("massimo")]
        public decimal? ImportoMassimo
        {
            get { return _importoMassimo; }
            set { _importoMassimo = value; }
        }
}


ora l'errore è questo:
È necessario aggiungere XmlChoiceIdentifierAttribute al membro 'Importo'.
Ho visto anche quello che dice http://msdn.microsoft.com/it-it/library/system.xml.serialization.xmlchoiceidentifierattribute(VS.95).aspx ma continuo ad avere altri errori, perchè l'esempio non fa al mio caso avendo diciamo 2 classi annidate.
Quello che posso dire che se invece di decimal? uso decimal la deserializzazione funziona correttamente.
Modificato da chiccosimo il 03 marzo 2009 17.15 -

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.