2010-03-31 42 views
7

el siguiente código especifica un tipo de "MyBase64Binary" que se deriva de una clase base "TestBase"error constructor XmlSerializer con clase derivada de una clase base

using System; 
using System.Xml.Serialization; 
using System.Collections; 
using System.Xml.Schema; 
using System.ComponentModel; 

namespace Test 
{ 
    public class TestBase 
    { 
     public TestBase() 
     { 
     } 
    } 

    [XmlType(TypeName = "base64Binary"), Serializable] 
    public partial class MyBase64Binary : TestBase 
    { 
     [System.Xml.Serialization.XmlTextAttribute(DataType = "base64Binary")] 
     [EditorBrowsable(EditorBrowsableState.Advanced)] 
     public Byte[] __Value; 

     [XmlIgnore] 
     public Byte[] Value 
     { 
      get { return __Value; } 
      set { __Value = value; } 
     } 

     public MyBase64Binary() 
     { 
     } 

    } 
} 

Si intento para crear un XmlSerializer como este

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Xml.Serialization; 

namespace Test1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      XmlSerializer s = new XmlSerializer(typeof(Test.MyBase64Binary)); 
     } 
    } 
} 

de éste cuando me siento un error InvalidOperationException:

{"There was an error reflecting type 'Test.MyBase64Binary'."} 

Y la excepción interna me dice lo siguiente:

{"Cannot serialize object of type 'Test.MyBase64Binary'. Consider changing type of XmlText member 'Test.MyBase64Binary.__Value' from System.Byte[] to string or string array."} 

Si no se derivo de la clase "TestBase" entonces todo funciona bien.

No entiendo la solución. Por favor ayuda.
¿Qué pasa?

Saludos desde Alemania
Ene

Respuesta

4

Si cambia XmlTextAttribute a XmlAttribute o XmlElement, debería estar bien. Como estabas tratando de usar XmlTextAttribute, asumió que sería algún tipo de cadena. Si desea una matriz de bytes real serializada, pruebe XmlAttribute o XmlElement

+1

+1, el problema es el atributo, no tiene nada que ver con la clase base. –

+2

Tanques! ¡Parece funcionar! ¿Pero por qué el serializador funciona si se omite la clase base y no se deriva? ¿No debería ocurrir la excepción? –

+0

@Jan Experimentando el mismo problema. Si se omite la clase base, funciona. De alguna manera comportamiento extraño ... – Sven

-1

¿Tiene añadiendo [Serializable] a su ayuda clase base? Me gustaría asegurarme de que tu clase base también esté decorada adecuadamente. Sin embargo, no sé si esto ayudará o no.

+1

No, agregando [Serializable] no funcionará. –

+3

'XmlSerializer' ** NO ** usa el' SerializableAttribute'. – Venemo

Cuestiones relacionadas