in

dotNet Umbria

Il primo User Group in Umbria sul mondo .Net
Latest post 02-12-2008 6:56 PM by Paolo Possanzini. 3 replies.
Page 1 of 1 (4 items)
Sort Posts: Previous Next
  • 02-09-2008 4:10 PM

    There was an error reflecting type interface...

     Ciao a tutti,

    serializzando un oggetto tramite l'XmlSerialize...

       public string ToXml(Object o)
        {
            XmlSerializer serializer = new XmlSerializer(o.GetType());
            StringWriter stringWriter = new StringWriter();

            XmlTextWriter xmlWriter...

    mi sono imattuto nel seguente errore:

    "...There was an error reflecting type..."  

    Cercando in giro sono riuscito a trovare che l'errore è generato dal fatto che l'oggetto ha una proprietà di tipo "interface" che non è serializzabile.

    Ovviamente non posso modificare la logica delle classi perchè una proprietà interface non è serializzabile...  

    Che fare?

    Dox 

  • 02-09-2008 5:58 PM In reply to

    Re: There was an error reflecting type interface...

    Ciao, hai tre possibilità.

    1.  Escludi la proprietà dalla serializzazione XML attraverso l'attributo XmlIgnoreAttribute
    2. Implementi l'interfaccia IXmlSerializable, che con i suoi 3 methodi GetSchema, WriteXml, ReadXml, ti permette di customizzare completamente la logica di serializzazione e deserializzazione dell'oggetto.
    3. L'ultima e più difficile che di solito si evita, erediti XmlSerializer per customizzare la logica di serializzazione degli oggetti e utilizzi il tuo serializzatore custom.

    Di prassi la 3a ipotesi si evita perchè rompe la compatibilità con il serializzatore standard del framework.

    Buona fortuna

    Ciao

    Paolo Possanzini

  • 02-12-2008 12:00 PM In reply to

    Re: There was an error reflecting type interface...

    Grazie per il suggerimento! per il momento ho risolto escludendo la propery dall'XML!

     Visto che siamo nell'argomento provo a chiedere aiuto sempre sul Serializer...

    Quando serializzo un List Generic il serializer mi aggiunge un nodo di root <ArrayOf....>. Se volessi aggiungere un attributo a quel nodo... come posso fare? Devo per forza  implementare l'IXmlSerializable? 

    Grazie!! 

  • 02-12-2008 6:56 PM In reply to

    Re: There was an error reflecting type interface...

    Una delle soluzioni è sicuramente implementare IXmlSerializable,
    tuttavia puoi creare una classe che eredita da List Generic e decorarla con l'attributo XMLElement.
    Ecco un esempio:

    Immagina di voler creare una lista di string.

    [XmlElement("Stringhe")]
    public class ListadiString : List<string>
    {

    }

    Non è necessario fornire alcuna implementazione poichè tutto il codice lo prende dalla classe base List<string>

     

    Buon lavoro.

Page 1 of 1 (4 items)
dotNet Umbria 2007-2008
Powered by Community Server (Commercial Edition), by Telligent Systems